ssh密钥是否需要命名为id_rsa?


130

创建带有密钥身份验证的构建服务器时,我曾多次遇到此问题。

我想知道是否还有其他人经历过。对于当前用户,我有几个键,它们可能会连接到不同的计算机。假设machine1和machine2。我已经将我的公共密钥粘贴到了各自的authorized_keys文件中。我将第一个命名为第一把钥匙id_rsa和第二把钥匙弯头。

当我尝试连接到bender时,我的冗长的ssh连接得到以下输出

debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

如上所示,它仅提供id_rsa密钥。这个对吗?如果可以,为什么?如何获得更多钥匙?我知道这是我断断续续看到的一个问题,因为我在家中有多个键而没有很多麻烦。

我还希望获得有关发布密钥和私钥如何与客户端和服务器交互的概述。我以为我有一个不错的主意,但显然我错过了一些东西。

谢谢,麻烦您了。

Answers:


156

默认情况下,ssh搜索id_dsaid_rsa文件。密钥不必这样命名,您也可以对其命名mykey,甚至将其放置在其他目录中。但是,如果您执行上述任一操作,则需要在ssh命令中显式引用键,如下所示:

ssh user@server -i /path/to/mykey

如果命令不接受-i,例如sshfs,请使用以下IdentityFile选项:

sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint

这个怎么运作

生成密钥时,您将获得两个文件:(id_rsa私钥)和id_rsa.pub(公钥)。顾名思义,应将私钥保密,并将公钥发布给公众。

公钥认证与公钥和私钥一起使用。客户端和服务器都有自己的密钥。安装openssh-server服务器时,会自动生成公钥和私钥。对于客户,您必须自己完成。

当您(客户端)与服务器连接时,将交换公共密钥。您会收到一台服务器,而您的服务器是。第一次收到服务器公钥时,系统会要求您接受它。如果此公钥在一段时间内发生更改,则会警告您,因为可能正在进行的MITM(中间人)攻击正在拦截客户机与服务器之间的通信。

服务器检查是否允许您连接(在中定义/etc/ssh/sshd_config)以及~/.ssh/authorized_keys文件中是否列出了您的公钥。拒绝公共密钥的可能原因:

  • /etc/ssh/sshd_config
    • AllowUsersAllowGroups已指定或,但是您的服务器用户未在组或用户列表中列出(默认值未定义,对登录的用户或组没有限制)。
    • DenyUsersDenyGroups已指定,则您在用户或组列表中。
    • 您尝试以root用户身份登录,但PermitRootLogin设置为No(默认yes)。
    • PubkeyAuthentication设置为No(默认yes)。
    • AuthorizedKeysFile设置为其他位置,并且不将公钥添加到该文件(default .ssh/authorized_keys,相对于home dir)
  • ~/.ssh/authorized_keys:您的公钥未添加到该文件中(请注意,该文件以root用户身份读取)

使用多个键

使用多个键并不少见。ssh user@host -i /path/to/identity_file您可以使用配置文件来代替运行~/.ssh/config

常用设置是IdentityFile(键)和端口。仅当使用ssh youruser@yourhost以下命令连接时,下一个配置才会检查“ id_dsa”和“ bender” :

Host yourhost
   IdentityFile ~/.ssh/id_dsa
   IdentityFile ~/.ssh/bender

如果省略Host yourhost,则设置将应用于所有SSH连接。其他选项也可以此主机匹配指定的,像User youruserPort 2222等等。这将允许您与速记连接ssh yourhost代替ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender


1
为什么需要指定密钥?重点是让我可以更轻松地使用ssh。
myusuf3 2011年

2
@StevenRoose from ssh_config(5)文件名可以使用波浪号语法来引用用户的主目录或以下转义字符之一:'%d'(本地用户的主目录),'%u'(本地用户名),'% l'(本地主机名),'%h'(远程主机名)或'%r'(远程用户名)。无法指定通配符,但是我想这应该足够方便。请注意,服务器必须探查您发送的每个密钥,因此指定较少的密钥会更好。主机上的通配符有效,请再次参见的手册页ssh_config(5)
Lekensteyn

2
@therobyouknow您不必为每台计算机创建唯一的密钥对。通常,您只有几个密钥,并将其中一个密钥的公共密钥附加到.ssh/authorized_keys远程计算机上的文件中。如果您使用标准.ssh/id_rsa文件名(或id_dsa,id_ecdsa或最新的id_ed25519),则ssh会自动尝试此操作,并且您无需IdentityFile在配置中(或的-i path/to/id_file参数ssh)指定。
Lekensteyn 2014年

4
我喜欢超出要求的细节之外的答案,并花一些时间来解释这个概念。很棒的工作!+1
user2490003

1
@landed它是SSH服务器的主机(可以是IP地址或DNS名称)。我试图澄清这一部分,希望对您有所帮助。
Lekensteyn

40

我最喜欢的方法允许自动选择私钥

IdentityFile ~/.ssh/%l_%r@%h_id_rsa

SSH将用本地计算机名替换%l,用远程用户名替换%r,用远程主机替换%h,因此,如果我想从名为foo的计算机作为用户连接到bar,则运行:

ssh bar

ssh会自动使用:

~/.ssh/foo_user@bar_id_rsa

由于还存储了本地主机,因此允许在NFS上共享主目录(每台机器使用不同的密钥!),甚至可以标识该密钥应位于哪台机器上。


1

考虑到史蒂文·罗斯(StevenRoose)的评论,即指定多个密钥需要更长的时间,而我碰巧正在使用许多密钥,所以我想提出我的个人解决方案。

我创建了一个指向我当时想使用的键的符号链接,由于该键很少更改,具体取决于我正在处理的项目,因此我对此感到满意。

在这里,我已链接到在virtualbox下运行的计算机的密钥:

$ cd .ssh/
$ ln -s adam_vbox-id_rsa.pub id_rsa.pub
$ ln -s adam_vbox-id_rsa id_rsa

$ ls -l
total 12
-rw------- 1 adam adam 1675 2013-10-04 02:04 adam_vbox-id_rsa
-rw-r--r-- 1 adam adam  396 2013-10-04 02:04 adam_vbox-id_rsa.pub
lrwxrwxrwx 1 adam adam   16 2013-10-04 02:17 id_rsa -> adam_vbox-id_rsa
lrwxrwxrwx 1 adam adam   20 2013-10-04 02:17 id_rsa.pub -> adam_vbox-id_rsa.pub
-rw-r--r-- 1 adam adam 3094 2013-10-04 02:09 known_hosts

也可以添加一个非常快速的脚本来切换到另一组脚本,而不必再次手动键入ln命令。

同样,这不仅是仅针对两个键的解决方案,对于更大的数量,它可能是可行的。


1
我只是在bash_profile中为我使用的每个服务器添加一个别名。因此,对于名为bob的服务器,我只是拥有这个...别名bob =“ ssh bob.example.com -l pete -i / path / to / key”-然后我只键入bob-我就进入了!
Peter Bagnall 2013年

2
尽管有时以“您已经知道的方式完成事情”更容易一些,但是如果您设置.ssh / configs密钥和主机,则还有一些更简单的方法。此评论针对评论发布者和评论者@ Peter-Bagnall
Scott Prive
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.