使用 SSH 密钥连接到远程 Centos 服务器
Posted
技术标签:
【中文标题】使用 SSH 密钥连接到远程 Centos 服务器【英文标题】:Connecting to a remote Centos server using SSH Keys 【发布时间】:2012-11-26 21:38:24 【问题描述】:我正在尝试使用 SSH 密钥连接到 Centos 6.3 服务器,这样我就可以远程运行脚本,而无需每次都要求输入密码。我已按照以下说明进行操作:
-
使用普通的 ssh 命令和密码登录服务器一次,以便服务器将您的计算机添加到已知主机
在您的计算机上使用 cygwin-terminal 生成密钥并将密码留空:
ssh-keygen -t rsa
现在设置您的私钥和 ssh 文件夹的权限:chmod 700 ~/.ssh & chmod 600 ~/.ssh/id_rsa
将公钥(id_rsa.pub)复制到服务器,登录服务器并将公钥添加到authorized_keys列表中:cat id_rsa.pub >> ~/.ssh/authorized_keys
导入公钥后,您可以将其从服务器中删除。在服务器上设置文件权限:chmod 700 ~/.ssh & chmod 600 ~/.ssh/authorized_keys
重启服务器上的 ssh 守护进程:service sshd restart
从您的计算机测试连接:ssh root@198.61.220.107
但是当我尝试 ssh 到远程服务器时,它仍然要求我输入密码。 .ssh 文件夹不是在服务器上创建的,所以我必须自己创建。对可能发生的事情有任何想法吗?我错过了什么?还有其他设置密钥的方法吗?
【问题讨论】:
当您提到〜时,您在说什么用户?此外,更改密钥不需要重新启动 sshd... @guillermog 请注意您未来问题的格式。它应该清晰易读,否则它只是一堵文字墙和一个开关。 @Blaskovicz 我使用的是 root 用户。 运行ssh
和 -v
可能会给你一些正在发生的事情的提示。
serverfault.com/questions/55343/…的潜在重复
【参考方案1】:
其他答案是通用的,请注意 Centos 6 使用 selinux。 尽管权限和所有权正确,selinux 仍可以拒绝访问 authorised_keys 文件
来自Centos 6 Release Notes中的已知问题:
如果您将公钥传输到带有 selinux 的 CentOS 6 服务器,请确保您正确设置了公钥的 selinux 上下文 启用。否则 selinux 可能会禁止访问 ~/.ssh/authorized_keys 文件和结果键 身份验证将不起作用。为了设置正确的上下文 你可以使用:
restorecon -R -v /home/user/.ssh
来自 CentOS 6 的 ssh-copy-id 可以识别 selinux 上下文,不需要之前的解决方法。
【讨论】:
【参考方案2】:Althogh OP 找到了解决方案,我想记录下我对类似问题的解决方案,希望对那些在谷歌上搜索类似问题并得到这个答案的人有所帮助。
我的问题的原因是CentOS服务器上用户主文件夹中的.ssh目录在useradd
命令创建后没有设置正确的模式。
另外,我需要通过以下命令手动设置.ssh文件夹模式:
chmod g-w /home/user
chmod 700 /home/user/.ssh
chmod 600 /home/user/.ssh/authorized_keys
【讨论】:
对我来说关键项目是chmod g-w /home/user
【参考方案3】:
显然这是一个已知的bug。建议的解决方案实际上不起作用,但我发现这可以在 CentOS 6.2 系统上工作:
chmod 600 .ssh/authorized_keys
chmod 700 .ssh
【讨论】:
试过了,但还是不行。【参考方案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
谢谢大家的帮助。
【讨论】:
以上是关于使用 SSH 密钥连接到远程 Centos 服务器的主要内容,如果未能解决你的问题,请参考以下文章