SSH 公钥认证不起作用

SSH 公钥认证不起作用

我在为 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

(呼)终于成功了。

相关内容