![SSH「拒絕金鑰」僅適用於公用 IP,在本地工作](https://rvso.com/image/1568304/SSH%E3%80%8C%E6%8B%92%E7%B5%95%E9%87%91%E9%91%B0%E3%80%8D%E5%83%85%E9%81%A9%E7%94%A8%E6%96%BC%E5%85%AC%E7%94%A8%20IP%EF%BC%8C%E5%9C%A8%E6%9C%AC%E5%9C%B0%E5%B7%A5%E4%BD%9C.png)
所以我的問題是我無法從我的客戶端(Windows 7 透過 PuTTY)連接到我的 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
,將公鑰中以 開頭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>
...成功。 - 連接到連接埠 22作為
user@<public_ip>
...。Server refused our key
作為獎勵,當密鑰被拒絕時,tail
ing不會給我任何東西。/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。