![SSH“拒绝密钥”仅适用于公共 IP,可在本地运行](https://linux22.com/image/1568304/SSH%E2%80%9C%E6%8B%92%E7%BB%9D%E5%AF%86%E9%92%A5%E2%80%9D%E4%BB%85%E9%80%82%E7%94%A8%E4%BA%8E%E5%85%AC%E5%85%B1%20IP%EF%BC%8C%E5%8F%AF%E5%9C%A8%E6%9C%AC%E5%9C%B0%E8%BF%90%E8%A1%8C.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。