我正在尝试在我的 Ubuntu 机器和我的 Web 服务器之间设置一个密钥,这样我就可以通过 SSH 进入它,而不需要每次都输入密码。
我已按照此处的教程进行操作 -http://www.csua.berkeley.edu/~ranga/notes/ssh_nopass.html- 信中所述。
虽然一切似乎都正常,但当我下次尝试通过 SSH 进入服务器时,它仍然提示我输入密码。
我的第一个疑问是,我这样做的原因是为了能够通过 SSH 连接到我服务器上的特定站点,因此我使用与该站点关联的用户名(在本例中为 tosbourn)在服务器上设置了这一切,这是对的还是我应该在服务器上使用 root?
第二个问题是,由于我的机器上的用户名不同(用户名是 toby),我认为这可能会导致它无法正常工作?我的假设正确吗?还是这无关紧要?
目前,我的本地计算机和服务器上的主目录中都有 .ssh,并且我已复制了所需的文件并将其重命名为 authorized_keys (和 keys2)
任何帮助将不胜感激。
答案1
要检查的一件事是服务器上密钥文件的权限。我过去发现,除非权限受到严格限制,否则sshd
不会使用该文件。authorised_keys
chmod 600 ~/.ssh/authorized_keys
应该这么做。
顺便说一句,我正在使用 PuTTY 生成的密钥访问 Linux(Slackware)服务器,一切正常。
答案2
- 使用普通用户是好的,而且实际上更受欢迎。您甚至可以考虑禁用服务器上的 root 登录。
- 如果您的用户名在不同的机器上不同,您必须在 ssh 命令行(或文件中
~/.ssh/config
)指定用户名:ssh -l username hostname
。
在您的服务器上,检查系统登录/var/log
。我不确定您的机器上登录失败的记录在哪里,但查找登录失败后最近更改的日志文件,您应该能够找到一些线索。
如果这没有帮助,请尝试从 ssh: 获取详细输出ssh -v -l username hostname
。输出很难阅读和理解,但它可能会给你一些关于可能出错的地方的线索。
还值得检查的是,您放在服务器上的公钥不会出现在多行中。一个公钥 = authorized_keys 文件中的一行。
最后,您确定您的服务器上启用了公钥登录吗?
答案3
我在运行 Ubuntu 的服务器上遇到了密钥问题。一种测试方法是在服务器上执行以下操作:
sudo /usr/sbin/sshd -d -p [some port]
然后使用连接
ssh -v server.url -p [same port]
这应该会为您提供双方的调试信息。 sshd 进程可能更有趣,因为它会告诉您拒绝密钥的原因。
我的解决方案是放弃并将授权密钥移至 /etc/ssh/users/[用户名]/authorized_keys,然后更改 /etc/ssh/sshd_config 的 AuthorizedKeysFile 设置:
AuthorizedKeysFile /etc/ssh/users/%u/authorized_keys
这是一种蛮力解决方案,但它可能会解决您的问题。
答案4
在客户端上执行以下操作:
ssh-keygen
(无密码)
进而:
ssh-copy-id 用户名@服务器
这应该设置密钥登录。