设置机器以通过 SSH 使用密钥

设置机器以通过 SSH 使用密钥

我正在尝试在我的 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 用户名@服务器

这应该设置密钥登录。

相关内容