![SSH「拒否キー」はパブリック IP のみでローカルで動作します](https://rvso.com/image/1568304/SSH%E3%80%8C%E6%8B%92%E5%90%A6%E3%82%AD%E3%83%BC%E3%80%8D%E3%81%AF%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%20IP%20%E3%81%AE%E3%81%BF%E3%81%A7%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%99.png)
私の問題は、クライアント (PuTTY 経由の Windows 7) から SSH サーバー (Linux Mint Sarah で実行) に接続できないことです。ローカル IP 経由でのみ機能します。
サーバーとクライアントは両方とも同じサブネット上にあります。SSH サーバーは、パスワードなしの SSH-RSA キー接続のみを許可するように設定されています。キーをインストールしましたが、サーバーのローカル IP に接続すると、期待どおりに正常に動作します。
WAN デバイスのファイアウォールでポート 22 を開き、パブリック IP を試みると正しいボックスに接続されることを確認できます。サーバーのファイアウォールのオン/オフを切り替えると拒否されるからです。SSH 接続はサーバーに正常に到達し、秘密キーで認証を試みますが、次のエラーで失敗します。
Server refused our key
当たり前のようですが、同じキーでローカルで認証できるのに、キーが認証に失敗する理由がわかりません。ほとんどの結果がポート転送の誤りであるため、この問題を調査するのは困難でした。
私が試してみたのはこれです(以下これガイドなど):
- サーバー上のすべてのパッケージを更新しました
apt-get install openssh-server
。 - 設定しました
/etc/ssh/sshd_config
:Port 22
AllowUsers user
PasswordAuthentication no
UsePAM no
- PuTTYgen で、公開キーと秘密キーを作成し、ディレクトリに保存しました (Windows の場合)。
- で、 で始まって で終わる
/home/user/.ssh/authorized_keys
公開鍵の部分を、最後に改行を付けて 1 行にコピーしました。ssh-rsa
== comment
chmod 700 ~/.ssh
ls -al
以下にリストされているdrwx------
chmod 644 ~/.ssh/authorized_keys
ls -l
以下にリストされている-rw-r--r--
- PuTTY の SSH > Auth で、「認証用の秘密鍵」を先ほど生成した秘密鍵に設定します。
- ポート22に接続します
user@<local_ip>
...成功します。 user@<public_ip>
...としてポート 22 に接続しますServer refused our key
。
ボーナスとして、キーが拒否された場合、tail
ing は何も返しません。ローカルに接続すると、 1 行が出力されます。/var/log/auth.log
Accepted publickey
最後に、関連があるかどうかはわかりませんが、パブリック IP で FileZilla を使用して SFTP に接続しようとすると、次のエラーが発生します。
Error: The first key-exchange algorithm supported by the server is diffie-hellman-group1-sha1, which is no longer secure. Aborting connection.
Error: Could not connect to server
私が中級 Linux ユーザーだと言うのは大げさなので、何か見落としているのかもしれません。私の問題が明確になったことを願っています。どんな助けでもいただければ幸いです。
編集: PuTTY の SSH パケットと生データからの出力 (ほとんどがゴミなので、人間が読めると思われるものも含めました):
Event Log: Looking up host "<omitted>"
Event Log: Connecting to <omitted> port 22
Event Log: We claim version: SSH-2.0-PuTTY_Release_0.67
Event Log: Server version: SSH-2.0-dropbear_0.46
Event Log: We believe remote version has SSH-2 channel request bug
Event Log: Using SSH protocol version 2
Event Log: Using Diffie-Hellman with standard group "group1"
Event Log: Doing Diffie-Hellman key exchange with hash SHA-1
Event Log: Host key fingerprint is:
Event Log: ssh-rsa 1040 <omitted>
Outgoing packet #0x2, type 21 / 0x15 (SSH2_MSG_NEWKEYS)
Event Log: Initialised triple-DES CBC client->server encryption
Event Log: Initialised HMAC-SHA1 client->server MAC algorithm
Incoming packet #0x2, type 21 / 0x15 (SSH2_MSG_NEWKEYS)
Event Log: Initialised triple-DES CBC server->client encryption
Event Log: Initialised HMAC-SHA1 server->client MAC algorithm
Incoming packet #0x4, type 51 / 0x33 (SSH2_MSG_USERAUTH_FAILURE)
00000000 00 00 00 12 70 75 62 6c 69 63 6b 65 79 2c 70 61 ....publickey,pa
00000010 73 73 77 6f 72 64 00 ssword.
Event Log: Server refused our key
答え1
この行を見ると、パブリック IP のポート 22 に接続するときに、実際にはルーターまたはモデムに接続しているのではないかと疑われます。
Event Log: Server version: SSH-2.0-dropbear_0.46
内部 IP を使用して接続した場合、同じサーバー バージョン ラインが表示されますか? そうでない場合は、モデムやルーターで SSH を無効にし、ポート 22 を Linux サーバーの内部 IP にポート転送する (まだ設定していない場合) 必要があります。
モデム/ルーターで SSH を無効にできない場合は、別のポート (たとえば 2222) を Linux サーバーのポート 22 にポート転送してみてください。