3月 192012
 
シェアする

/var/log/secureに以下のログが確認できる場合、原因はsshdが許可しているProtocolのバージョンとSSHクライアントが利用しようとしているProtocolのバージョンとの間に差がある可能性がある。

Mar 19 22:29:13 vps1 sshd[60827]: Did not receive identification string from xxx.xx.xx.x

まずは、自身のsshサーバが許可しているProtocolを確認しましょう。

[root@vps1 ~]# grep Protocol /etc/ssh/sshd_config
#Protocol 2,1
Protocol 2
[root@vps1 ~]#

上記の結果から、私のsshサーバはProtocol version 2 での接続のみを許可していることがわかります。
sshコマンドに「-1」オプションをつけ、許可していないProtocol version 1 で接続を試してみましょう。

[root@vps1 ~]# ssh -1 localhost
Protocol major versions differ: 1 vs. 2
[root@vps1 ~]#

見事にエラーになりました。
/var/log/secureを確認してみる(私はすぐに確認したので末尾1行のみを参照する)と、

あれまーお見事!

[root@vps1 ~]# tail -n 1 /var/log/secure
Mar 19 22:29:13 vps1 sshd[60827]: Did not receive identification string from 127.0.0.1
[root@vps1 ~]#

なので、正しく接続を行いたい接続元から接続を試したときにこのエラーログが出た場合は、/etc/ssh/sshd_configの設定を確認し、必要であれば変更する必要があります。この時点で、利用しているSSHクライアントが対応しているProtocol versionを確認すると、納得がいくかもしれません。設定を変更したあと、sshdの再起動が必要になるのでお忘れなく(xinetd経由でsshサーバを公開している場合は、xinetdの再起動は必要ありません)。

1. sedコマンドで「Protocol 2」を「Protocol 2,1」に書き換え、同時にyyyymmddを末尾につけたバックアップを作成します。

# sed -i.`date +%Y%m%d` 's/^Protocol 2/Protocol 2,1/g' /etc/ssh/sshd_config

2. 作成されたバックアップを確認します。

# ls -la /etc/ssh/sshd_config*

3. バックアップと現在の設定の差分を確認します。

# diff /etc/ssh/sshd_config /etc/ssh/sshd_config.`date +%Y%m%d`

4. sshdを再起動します。

# service sshd restart

以下、sshサーバがsshdで公開されているか、xinetd経由で公開されているかを確認する方法。

[root@vps1 ~]# netstat -antp | grep 22 | grep LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7596/xinetd
[root@vps1 ~]#

私はxinetd経由で公開しているので、上記xinetdになっています。sshd単体で公開されている場合は、sshdになります。

以上

このエントリーをはてなブックマークに追加
 Tagged with:

  2 コメント

  1. 本当に感謝します!!
    ちょうどこのメッセージに悩まされていました!!

  2. xucさん
    コメントありがとうございます。
    良かったです!

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ