我在为 Ubuntu Server 12.04 (A) 上的 SSH 服务器设置公钥认证以便从 Ubuntu Server 13.04 (B) 进行认证时遇到了麻烦。
我现在正在做什么(我正在尝试遵循说明这里):
- 在 B 上:使用 创建一个新密钥
ssh-keygen -C ""
,不使用密码,写入/.ssh/id_rsa
- 我没有收到任何错误 - 在 B:运行
ssh-copy-id -i /.ssh/id_rsa user@host-a
- 同样,出现成功消息 - 在 B:
ssh -i /.ssh/id_rsa user@host-a
- 我仍然需要输入我的密码user@host-a
在 A 上,我检查了/.ssh/authorized_keys
运行后是否修改了ssh-copy-id
,情况确实如此。此外,在两台设备上,我都将其添加到/etc/ssh/sshd_config
:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /.ssh/authorized_keys
有人知道这里可能存在什么问题吗?
/var/log/auth.log
这是我在机器 A 上的尾部:
Jun 13 22:17:56 laptop-camil sshd[12344]: Server listening on 0.0.0.0 port 22.
Jun 13 22:17:56 laptop-camil sshd[12344]: Server listening on :: port 22.
Jun 13 22:18:27 laptop-camil sshd[12345]: Authentication refused: bad ownership or modes for directory /.ssh
Jun 13 22:18:30 laptop-camil sshd[12345]: Accepted password for camilstaps from 164.138.27.37 port 48407 ssh2
Jun 13 22:18:30 laptop-camil sshd[12345]: pam_unix(sshd:session): session opened for user camilstaps by (uid=0)
Jun 13 22:18:35 laptop-camil sshd[12464]: Received disconnect from 164.138.27.37: 11: disconnected by user
Jun 13 22:18:35 laptop-camil sshd[12345]: pam_unix(sshd:session): session closed for user camilstaps
Jun 13 22:18:42 laptop-camil sshd[12516]: Authentication refused: bad ownership or modes for directory /.ssh
Jun 13 22:18:44 laptop-camil sshd[12516]: Connection closed by <host-b> [preauth]
答案1
日志文件中有什么东西,特别是/var/log/auth.log
?您可能还应该仔细检查 .ssh 目录和文件的权限。
我自己不需要修改 sshd_config 来实现这种访问。我想知道您的修改是否破坏了某些东西,尤其是 AuthorizedKeysFile 行。通常,您需要将 authorized_keys 放在 下$USER/.ssh
。
以下是我的其中一台服务器上的某个用户的权限:
:~/.ssh$ ls -ld .
drwx------ 2 rrd rrd 4096 May 28 17:57 .
:~/.ssh$ ll
total 280
-rw-r----- 1 rrd rrd 4351 May 22 16:20 authorized_keys
-rw------- 1 rrd rrd 1679 Apr 27 2012 id_rsa
-rw-r--r-- 1 rrd rrd 399 Apr 27 2012 id_rsa.pub
-rw-r--r-- 1 rrd rrd 266138 Jun 13 00:18 known_hosts
确保单个文件至少受到这样的限制。
正如 guntbert 指出的那样,还要检查目录和文件是否归您所有。否则权限将毫无意义(或无法工作)。
谁拥有 B 上的 authorized_keys 中的密钥?(密钥后面写着 user@host 的部分。)是 root@A 吗?
也就是说,在查看时,您的设置~/.ssh/authorized_keys
的等价内容是什么:bert@etherbert
ssh-rsa AAAA...ffsII8dSaDF33 bert@etherbet
我只需手动编辑远程 .ssh/authorized 密钥进行测试,并输入您要启动连接的用户的 id_rsa.pub 内容。
确保您来自拥有远程 authorized_keys 文件中密钥的用户。
答案2
该目录~/.ssh
必须由用户拥有,而不是 root。因此,更改它即可正常工作。
为了避免每次使用 ssh-agent 时都必须输入私钥的密码。ssh-add .ssh/id_rsa
将把密钥添加到代理,从那时起代理将把密钥提供给 ssh。
答案3
除了其他人提供的解决方案之外,我的额外建议是您应该首先检查日志文件:/var/log/secure
,这是 sshd 存放日志的地方。如果出现问题,检查 sshd 抱怨的内容/var/log/secure
将很快缩小可能的问题范围。
答案4
对我来说没什么用。我不知道为什么?我尝试了每一个解决方案。
第一的
ssh-copy-id:未复制 id_rsa 和 id_rsa.pub
第二
ssh-代理 $SHELL
ssh-添加-L
ssh 添加
ssh-copy-id -i 远程主机
两种方法都不起作用。我想我运气不好。有人说.ssh
要从 root 更改文件夹的权限。我认为这不是一个更好的选择。当我的上述案例失败时,我正在做什么。我在服务器上创建了一个新密钥,并将此密钥保存在 github/gitlab 上。这也不是一个很好的方法。在这里我尝试了一种替代方法,我希望它可以帮助某人。
首先,我在远程服务器上创建一个文件夹,并赋予该用户可写入的权限。然后我在本地机器上执行以下步骤。
cd ~/.ssh
scp -r * [电子邮件保护].**:远程服务器上可写文件夹的路径
然后我登录远程服务器,然后
cd 我复制了密钥的文件夹路径
& 然后
mv * ~/.ssh
(呼)终于成功了。