FreeBSD/SSHD

SSHD

FreeBSDでは標準でsshdが起動するようになっていますが、
5.0くらいからsshdがSSH2が標準になっている為、telenet+ttsshでログインすることができないようになっています。
設定ファイルを編集して、telnet+ttsshでログインできるようにします。

ssh/tcp: bind: Address already in use というエラーが頻繁しているのを発見
解決方法を記述した。

  1. sshd_configの編集
  2. /etc/inetd.confを確認
  3. /etc/rc.confの確認
  4. 起動
  5. パスワードミス回数にしきい値を設定
  6. ssh/tcp: bind: Address already in use というエラーが頻繁
  7. sshの接続が切断されないようにする。

環境

FreeBSD 5.4
FreeBSD 6.0

/etc/ssh/sshd_config の編集

以下の2箇所を編集する。

-----------------------------編集個所----------------------------------
#可能なプロトコルのバージョンを指定 SSH2のみ(今回修正してSSH1も接続可能に戻し)
#Protocol 2
Protocol 2,1
・・・
# 認証を可能にするためには YESを指定する
# パスフレーズだけじゃなくて、一般のパスワードで利用したい場合にはこれを変更しないとダメ
# Change to yes to enable built-in password authentication.
#PasswordAuthentication no
PasswordAuthentication yes
-----------------------------編集個所----------------------------------

/etc/inetd.confを確認

rc.confでのssh起動とinetdでの起動とできるようになっているが、両方が起動していると
ポートが塞がっていて使えないとエラーがでる。
/etc/inetd.confを確認し下記の部分がコメントアウトになっていることを確認。
なっていなければ、コメントアウト(#)をつける。

-----------------------------確認個所----------------------------------
#ssh    stream  tcp     nowait  root    /usr/sbin/sshd          sshd -i -4
#ssh    stream  tcp6    nowait  root    /usr/sbin/sshd          sshd -i -6
-----------------------------確認個所----------------------------------

etc/rc.confの確認

/etc/rc.confにてsshが有効になっているか確認する。
以下の記述が入っていればOK。

sshd_enable="YES"

起動

# sh /etc/rc.d/sshd start

後は、sshで接続してみて、テストしてください。

パスワードミス回数にしきい値を設定

たとえば、SSH なら、

ssh     stream  tcp     nowait/0/3/2    root .....

なんて記述をしておきます。

この 0/3/2 って記述ですが。
     : : :
     1 2 3

1	最大子プロセス数(0は無制限)
2	同一IPからの1分以内の最大接続数
3	同一IPからの最大子プロセス数

となります。
上記の設定の場合は inetd から生成される ssh のプロセス数は無制限で、
同一IPからの一分以内のコネクションリクエスト数は3回まで、さらに同一IPから
接続が確立して生成された ssh プロセス数は2つまで。ということになります。

1分以内に接続に3回失敗すると、そのIPからのコネクションリクエストは
refuse されます。が、1分経過するとまた許可されます。

  • ssh/tcp: bind: Address already in use というエラーが頻繁

    ■原因
    sshが重複して起動していたためであった.つまり,FreeBSDのインストール時に,
    sshdのログインを許すか,という問いにyesと答えた上に,inetdからもsshdが起動される
    ように設定していたことが原因であった.

    ■解決方法
    上記の状態では,設定ファイル /etc/rc.conf において,
    sshd_enable="YES"
    inetd_enable="YES"
    の両方が存在し,さらに /etc/inetd.conf において,
    ssh     stream  tcp     nowait  root    /usr/sbin/sshd          sshd -i -4
    となっている.
    sshdはinetdから起動すればふつうは十分であるから,/etc/rc.conf において
    sshd_enable="YES"
    を削除し,マシンを再起動した.

rootでログインできないようにする。

# vi /etc/ssh/sshd_config
PermitRootLogin yes
      ↓
PermitRootLogin no

sshの接続が切断されないようにする。

# vi /etc/ssh/sshd_config
ClientAliveInterval 60
ClientAliveCountMax 5

# /etc/rc.d/sshd restart

60秒x5回=300秒