![为什么 SSH 不遵守我的授权密钥?](https://linux22.com/image/1364153/%E4%B8%BA%E4%BB%80%E4%B9%88%20SSH%20%E4%B8%8D%E9%81%B5%E5%AE%88%E6%88%91%E7%9A%84%E6%8E%88%E6%9D%83%E5%AF%86%E9%92%A5%EF%BC%9F.png)
我家里有两台笔记本电脑,都运行 Ubuntu 12.04(桌面版),都使用同一个 NetGear wifi 路由器。我在其中一台机器上使用了一种称为“MAC 绑定”的技术,这样路由器每次尝试连接到互联网时都会为其分配相同的 192.168.1.52 IP 地址。(无关:MAC 绑定只是意味着配置路由器始终将特定的 MAC 地址绑定到特定的 IP。)
所以现在,我有 1 台笔记本电脑,它总是被分配一个在 192.168.1.1 到 192.168.1.50 范围内的随机 IP,还有 1 台笔记本电脑(我的“构建服务器”)总是被分配 192.168.1.52。
我正在尝试编写一些 bash 脚本,该脚本将在“客户端”笔记本电脑(随机 IP 机器)上运行,然后ssh
进入构建服务器(192.169.1.52 机器);因此,构建服务器必须具有来自我的 LAN 内部的“专用”IP。我不想明确地向这些 bash 脚本提供密码,所以我按照这篇文章生成 SSH 密钥。具体来说,我:
- 在我的客户端笔记本电脑上生成 SSH 密钥(生成一个
id_rsa.pub
文件) - 我
scp
将id_rsa.pub
文件发送到我的构建服务器,并将cat
其添加到~/.ssh/authorized_keys
文件中。我验证了我的客户端笔记本电脑的 SSH 密钥现在存在于authorized_keys
构建服务器上的文件中。 - 我关闭了客户端笔记本电脑上的终端,然后重新打开了一个新终端,只是为了确保万无一失(以防 Linux 需要重新启动任何东西等)。
- 然后我尝试通过 SSH 连接到构建服务器,仍提示我输入密码!
这是怎么回事?为什么我的构建服务器上的 SSH 不遵守来自客户端笔记本电脑的授权密钥?我需要在构建服务器上重新启动任何东西吗(sshd
等等)?我是否错过了这里的关键步骤?如何开始故障排除?提前致谢!
更新:显然 Ubuntu 没有/var/log/secure.log
,但是做有一个/var/log/auth.log
。当我在构建服务器上跟踪此日志,然后尝试从我的客户端笔记本电脑通过 SSH 进入构建服务器时,发生了以下情况:
- 我
ssh myuser@buildserver
从客户端笔记本电脑运行 - 系统提示我输入密码。
- 一旦输入密码,我就会在构建服务器的
auth.log
文件中看到以下输出:
May 21 12:02:07 buildserver sshd[28930]: error: RSA_public_decrypt failed: error:0407006A:lib(4):func(112):reason(106)
May 21 12:02:10 buildserver sshd[28930]: pam_sm_authenticate: Called
May 21 12:02:10 buildserver sshd[28930]: pam_sm_authenticate: username = [myuser]
May 21 12:02:10 buildserver sshd[28930]: pam_sm_authenticate: /home/myuser is already mounted
May 21 12:02:10 buildserver sshd[28930]: Accepted password for myuser from 192.168.1.3 port 39821 ssh2
May 21 12:02:10 buildserver sshd[28930]: pam_unix(sshd:session): session opened for user myuser by (uid=0)
May 21 12:02:10 buildserver sshd[29003]: Received disconnect from 192.168.1.3: 11: disconnected by user
May 21 12:02:10 buildserver sshd[28930]: pam_unix(sshd:session): session closed for user myuser
也许我应该提到一些事情:在两台机器上(客户端笔记本电脑和我的构建服务器,用户名/帐户名是myuser
) - Linux 是否会因为两台机器上的用户名相同而感到困惑?
答案1
第一步:使用 重启 ssh /etc/init.d/sshd restart
。另外,确保 authorized_users 文件的权限正确。要验证,请使用chmod 600 ~/.ssh/authorized_keys
并确保它归您以该身份登录的用户所有。
答案2
对我来说,删除 id_rsa.pub 有帮助(我使用的是 ~/.ssh/id_rsa 密钥)。这是因为 id_rsa.pub 与我的 id_rsa 密钥不匹配。
答案3
你的公钥是什么格式的?
我发现很多工具生成这样的密钥:
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "1024-bit RSA, converted from OpenSSH by [email protected]"
AAAAB3NzaC1yc2EAAAABIwAAAIEA1on8gxCGJJWSRT4uOrR13mUaUk0hRf4RzxSZ1zRb
YYFw8pfGesIFoEuVth4HKyF8k1y4mRUnYHP1XNMNMJl1JcEArC2asV8sHf6zSPVffozZ
5TT4SfsUu/iKy9lUcCfXzwre4WWZSXXcPff+EHtWshahu3WzBdnGxm5Xoi89zcE=
---- END SSH2 PUBLIC KEY ----
我的authorized_keys
文件始终包含这样的密钥:
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA1on8gxCGJJWSRT4uOrR13mUaUk0hRf4RzxSZ1zRbYYFw8pfGesIFoEuVth4HKyF8k1y4mRUnYHP1XNMNMJl1JcEArC2asV8sHf6zSPVffozZ5TT4SfsUu/iKy9lUcCfXzwre4WWZSXXcPff+EHtWshahu3WzBdnGxm5Xoi89zcE=
(公钥全部连接在一行上)