7

我正在尝试使用 SSH 密钥连接到 Centos 6.3 服务器,这样我就可以远程运行脚本,而无需每次都要求输入密码。我已按照以下说明进行操作:

  1. 使用普通的 ssh 命令和密码登录服务器一次,以便服务器将您的计算机添加到已知主机
  2. 在您的计算机中使用 cygwin-terminal 生成密钥并将密码留空:ssh-keygen -t rsa
  3. 现在设置您的私钥和 ssh 文件夹的权限:chmod 700 ~/.ssh & chmod 600 ~/.ssh/id_rsa
  4. 将公钥(id_rsa.pub)复制到服务器,登录服务器并将公钥添加到authorized_keys列表中:cat id_rsa.pub >> ~/.ssh/authorized_keys
  5. 导入公钥后,您可以将其从服务器中删除。在服务器上设置文件权限:chmod 700 ~/.ssh & chmod 600 ~/.ssh/authorized_keys
  6. 重启服务器上的 ssh 守护进程:service sshd restart
  7. 从您的计算机测试连接:ssh root@198.61.220.107

但是当我尝试 ssh 到远程服务器时,它仍然要求我输入密码。.ssh 文件夹不是在服务器上创建的,所以我必须自己创建。对可能发生的事情有任何想法吗?我错过了什么?还有另一种设置密钥的方法吗?

4

4 回答 4

4

显然这是一个已知的错误。建议的解决方案实际上不起作用,但我发现这将在 CentOS 6.2 系统上工作:

chmod 600 .ssh/authorized_keys
chmod 700 .ssh
于 2012-12-09T04:47:28.503 回答
4

好吧,事实证明我/root在设置服务器时愚蠢地更改了目录的所有者,所以因为这是/.ssh我试图用(root)登录的用户的目录所在的位置,所以它拒绝访问该目录,因为它属于给另一个用户。

Dec 10 16:25:49 thyme sshd[9121]: Authentication refused: bad ownership or modes for directory /root

我将所有者更改回root,并且做到了。

chown root /root

谢谢你们的帮助。

于 2012-12-10T16:36:10.017 回答
2

Althogh OP 找到了解决方案,我想记录下我对类似问题的解决方案,希望对那些在谷歌上搜索类似问题并得出这个答案的人有所帮助。

useradd我的问题的原因是 CentOS 服务器上用户主文件夹中的 .ssh 目录在通过命令创建后没有设置正确的模式。

另外,我需要通过以下命令手动设置 .ssh 文件夹模式:

chmod g-w /home/user

chmod 700 /home/user/.ssh

chmod 600 /home/user/.ssh/authorized_keys

于 2013-12-27T15:17:41.730 回答
1

其他答案是通用的,请注意 Centos 6 使用 selinux。尽管权限和所有权正确,selinux 仍可以拒绝访问 authorised_keys 文件

Centos 6 发行说明中的​​已知问题:

  • 如果您将公钥传输到启用了 selinux 的 CentOS 6 服务器,请确保您正确设置了公钥的 selinux 上下文。否则 selinux 可能会禁止访问 ~/.ssh/authorized_keys 文件,因此密钥身份验证将不起作用。为了设置正确的上下文,您可以使用:

    restorecon -R -v /home/user/.ssh

  • CentOS 6 中的 ssh-copy-id 知道 selinux 上下文,不需要前面的解决方法。

于 2014-01-12T12:39:39.810 回答