SSH「拒否キー」はパブリック IP のみでローカルで動作します

SSH「拒否キー」はパブリック IP のみでローカルで動作します

私の問題は、クライアント (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 ~/.sshls -al以下にリストされているdrwx------
  • chmod 644 ~/.ssh/authorized_keysls -l以下にリストされている-rw-r--r--
  • PuTTY の SSH > Auth で、「認証用の秘密鍵」を先ほど生成した秘密鍵に設定します。
  • ポート22に接続しますuser@<local_ip>...成功します。
  • user@<public_ip>...としてポート 22 に接続しますServer refused our key

ボーナスとして、キーが拒否された場合、tailing は何も返しません。ローカルに接続すると、 1 行が出力されます。/var/log/auth.logAccepted 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 にポート転送してみてください。

関連情報