Saba note

醜悪コード Ugly hacks ITものづくり

SSHエラー集

ちゃんと設定しているつもりなのに繋がらないという時のエラーメッセージ集です。

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

クライアント側の/Users/ユーザ名/.ssh/known_hostsに古い接続情報が残っている場合にこのエラーが出ます。「リモードホストのアイデンティファイする方法が変わりました」ということで、known_hostsの情報とホスト側の新しい情報を照らし合わせると合ってなかったということです。known_hosts内の接続しているホスト名行を削除するか、中身をすべて削除すると新しいフィンガープリントを発行して接続できるようになります。

Permission denied (publickey,keyboard-interactive).

Permission denied (publickey,keyboard-interactive).

と言われたので、秘密鍵と公開鍵を600に変更してディレクトリなんかのパーミッションも確認してみる。結局何が原因だったかというと、$ ssh -i ~/.ssh/rsa_id 123.456.789.10という変な書き方をしていただけでした。$ ssh -i ~/.ssh/rsa_id root@123.456.789.10とユーザー名付けないと駄目なのは当たり前です。いずれにしろ自分の環境でのパーミッション周りのエラーです。

またあるいは、SSHのプロトコルが間違っているということがあります。(特に古いSSHの接続とかしていると、こうなったりします。)
この場合は、ホームディレクトリ/.ssh/configファイルに

protocol 1,2

と記述してサーバ側に合わせるか、sshのパラメータに

$ ssh -o protocol=1 ...

と、プロトコルを明示的に指定してあげればよいです。

WARNING: UNPROTECTED PRIVATE KEY FILE!

Warning: Permanently added 'ec2-123.456.789.101.compute-1.amazonaws.com,123.456.789.101' (RSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/username/.ssh/key.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /Users/username/.sshkey.pem
Permission denied (publickey).

ただ単に該当の秘密鍵/Users/username/.ssh/key.pemのパーミッションがよろしくないとのことです。chmod 400 /Users/username/.sshkey.pemとしてあげればOKです。600でもOKだと思う。

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/username/.ssh/known_hosts to get rid of this message.
Offending key in /Users/username/.ssh/known_hosts:9
RSA host key for 123.456.789.101 has changed and you have requested strict checking.
Host key verification failed.

known_hostsに登録されているホストと違うホストになってますよという警告です。場合によっては本当にサーバーをすり替えられているかもしれないし、ただ単に自分で再設定したサーバーに以前と同じようにアクセスしているだけかもしれません。known_hostsにかかれている該当のホスト情報を削除すると警告は出なくなり、新しいホストかどうかをもう一度確認するダイアログが出ます。

Warning: Identity file /* not accessible: No such file or directory.

Warning: Identity file /* not accessible: No such file or directory.

-iなどで鍵ファイルを指定した際に読込みに失敗したか、その指定ディレクトリに該当の鍵がないという警告です。所定の場所に鍵を移すか正しいパスを見なおしてください。

ssh_exchange_identification: Connection closed by remote host

ssh_exchange_identification: Connection closed by remote host

そもそもの公開鍵の設定(authorized_keysに記述している内容)が間違っているときにこのエラーが出てきます。新しく鍵を生成した際に公開鍵を間違って設定している可能性があるかもしれません。
またはTCP/Wrapperまわり、つまりhosts.allow / hosts.denyの設定を疑ってみます。denyhostsの設定をしている場合は、ログインに何度か失敗してブラックリストに載せられている可能性があります。接続元を許可してあげれば再度接続可能になります。

Disabling protocol version 2. Could not load host key

Disabling protocol version 2. Could not load host key

再起動時などにこういうエラーが出たら、SSHプロトコルがバージョン2なのにホストキーの設定がおかしいよ、というような感じになります。rsaとdsaのキーを有効にしないと駄目なので、

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key

の2行のコメントアウトを外して有効にしてから再起動するとたいてい治ってる。

Received disconnect from *: 2: Too many authentication failures for *

Received disconnect from [*IPアドレス]: 2: Too many authentication failures for [*username]

そのユーザー名での認証をした回数が制限を超えてしまったということです。SSHはいろんな認証方法を混在させて設定できるので、そういうのを上から順番になめて認証してくれますが、ある一定数のトライ以降は認証エラーとして返します。これの解決法がいろいろ面倒くさくて、password認証のサーバに接続したい場合は、クライアントの接続PCでssh_configファイルに、PreferredAuthentications passwordの一行を追加してあげるというのが1つ、またはssh接続時にオプションを追加してあげるとログインが通ります。(ブログ三郎さんのところが詳しいです。)

ssh user@[IPアドレス] -o PreferredAuthentications=password
ssh_exchange_identification: Connection closed by remote host

Offending key for IP in /path/.ssh/known_hosts:2

IP制限ではじかれています。

Offending key for IP in /path/.ssh/known_hosts:2

ssh_exchange_identification: read: Connection reset by peer

このようなエラーが出て都度「Are you sure you want to continue connecting (yes/no)? yes」が立ち上がってしまう場合があります。これは接続先の対象ホストのIPアドレスが変わったりIPアドレスと紐づくドメインが変わったりした際に、古い接続情報がknown_hostsファイルに残っているということになります。該当の行数(ここでは2行目の情報)を削除します。

ssh_exchange_identification: read: Connection reset by peer

最近はノートとwifiという感じで接続することもあって、wifiを切り替えるとこのエラーが出ることがあるんだけど、IP制限で弾かれていることが多い。またhosts.allowやhosts.denyの設定を間違ったりしてアクセスに障害が出るとこのエラーが出ることあります。

Permission denied.

滅多にみないけど、クライアント側でPermission denied.になってサーバー側でsecureログを見ると「User CLIENT_USER not allowed because account is locked」というのが出てました。これサーバー側のユーザーにパスワードを設定していないときに出るものでした。鍵認証といえどもサーバー側のユーザーにはパスワードを設定しておかないと駄目みたいです。

ssh: connect to host 12.34.56.xxx port 22: Connection timed out

ホストは合っていて正しくSSH接続を試みているのですが、Firewallとかで制限をかけられているか、あるいはポートが合っていないかなどだと思います。ポートの確認とFirewallまたはiptablesなどの確認をしましょう。

エラーじゃないけどうなくいかない

認証鍵で自動ログインする設定にした場合認証鍵が正しいのに設定がすべて正しいのにパスワードを訊かれてしまう場合があります。SSHはログインが失敗すると次々にログイン方法を変えてくれるので最終的にログインできないとなるとパスワードのプロンプトになるわけです。
そういった場合は、まずはSSH設定ファイル周りのパーミッションを疑うといいです。

.ssh [700]
.ssh/authorized_keys [600]

とかここら辺り。authorized_keysは設定によっては644とかでもOKな時があったりです。SSHの設定によるものなので、sshd_confとかを見るか、レンタルサーバーだったらいろいろやってみるか、レンタルサーバーに問い合わせるかというところでしょうか。

あと稀に.sshのおいてあるユーザーディレクトリがあると思うのですが、そのディレクトリのパーミッションによる場合もあったりしました。特にユーザーディレクトリが775や777になってる場合は要注意です。/home/user/.sshの場合、

/home/user [755]

を確認してみてください。パーミッションを広げすぎるとSSHはエラーになる場合があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です