将ssh密钥复制到另一台计算机的最简单方法?


342

我在家里很懒,并且在家用计算机上使用密码验证。我准备转向基于密钥的身份验证。网路上有许多方法可用来执行此操作,包括设定类别,然后将密钥缩回,直接将密钥缩回等。

我正在寻找一种最简单且推荐的方法来复制密钥,希望在Ubuntu ssh软件包中的某个地方有一个方便包装器?

我已经知道如何关闭密码登录


Answers:


463

ssh-copy-id命令(在openssh-client软件包中,默认情况下已安装)执行以下操作:

ssh-copy-id user@hostname.example.com

将您的默认身份(-i identity_file用于其他身份)的公钥复制到远程主机。

默认身份是您的“标准” ssh密钥。它由在两个文件(公钥和私钥)~/.ssh的目录,通常命名为identityid_rsaid_dsaid_ecdsaid_ed25519(和相同的带.pub),这取决于密钥类型。如果您创建的ssh密钥不止一个,则不必担心指定身份,ssh-copy-id只会自动选择它。

如果您没有身份,可以使用工具生成一个ssh-keygen

此外,如果服务器使用的端口与默认端口(22)不同,则应以这种方式使用引号(source):

ssh-copy-id "user@hostname.example.com -p <port-number>"

1
默认身份是什么?
Oxwivi 2011年

17
对于不同的端口,请使用以下命令:ssh-copy-id "user@host -p 6842"
jibon57

5
如果您要复制到的远程服务器不允许密码提示,并且基本上已被锁定保存以进行SSH访问,该怎么办?
赛勒(Cyle)2014年

10
在Mac上,您可以执行brew install ssh-copy-id然后运行命令。
Avishai 2014年

1
@MarcelStimberg,请更新答案以包含-i个人资料;人们可能拥有超过1个按键并将其全部按下,或者必须在评论中寻找-i选项
尼克

129

我喜欢马塞尔的回答。我不知道这个命令。我一直在使用在Oracle网站上找到的内容:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

我想仍然将其张贴在这里,因为它很好地说明了使用强大的shell代码可以实现的功能ssh。但是使用ssh-copy-id绝对是正确执行此操作的更安全方式!

请注意,如果该文件夹.ssh尚不存在,则上述命令将失败。另外,在创建文件时设置一个最小可能的权限可能更好(基本上是所有者的读写)。这是更高级的命令:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

2
这个确切的命令也可以在Mac上运行
Mihai P.

它应该可以在具有大多数shell的任何Unix下运行。如果文件夹.ssh在远程端不存在,我将使用更新的命令来更新帖子。
惠更斯(Huygens)

1
cat是没有必要的-一个正常的输入重定向是不够的,比如< ~/.ssh/id_rsa.pub | ssh ...
maxschlepzig

@惠更斯谢谢。记住这一点更为有用,因为您不需要安装任何东西,而且对于执行外部命令(例如更改高级示例中演示的更改服务器端权限)也很有用。
乔纳森·科玛

2
我更喜欢这种方式,因为它可以让您使用冗长的ssh,这有助于弄清为什么损坏了东西。sshcopyid只是冻结而从未工作过,这一切进行得很顺利。
警报器

31

图形方法

  1. 打开应用程序密码和密钥我的个人密钥
  2. 选择您的密钥,然后单击“ 远程为Secure Shell配置密钥”

设置计算机以进行SSH连接


我的菜单中没有“密码和加密密钥”。
豪尔赫·卡斯特罗

您正在使用哪个Ubuntu版本?在Ubuntu 10.04 LTS中,默认情况下应可用。
ændrük

10.10,刚刚添加了标签。马塞尔(Marcel)的答案就是我想要的答案,尽管您的台式机答案为+1!
Jorge Castro

4
这个程序是seahorse
吉尔斯

1
我认为此应用程序位于10.10的“系统”->“首选项”菜单中(目前无法检查,我位于10.04)
惠更斯2010年

18

在Ubuntu上,您可以从Launchpad获取密钥:

ssh-import-id [launchpad account name]

详细资料

  1. 您需要一个Launchpad帐户,以便登录或创建一个帐户
  2. 登录后,单击SSH密钥旁边的按钮
  3. 将公共密钥文件的内容粘贴到该字段中(包括注释)。这样的密钥如下所示:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    在此,ssh-rsa表示该密钥是RSA密钥,AAAAB3Nza .... UyDOFDqJp是实际密钥,lekensteyn也是注释。

  4. 通过按导入公共密钥保存密钥
  5. 如果一切顺利,您的密钥现在应该列在SSH密钥下:

该软件包ssh-import-id需要安装在需要从远程访问的机器上。该软件包与openssh-server软件包一起安装,因为它是的推荐软件包openssh-server。确保ssh-import-id已在客户机上安装了该文件后,运行:

ssh-import-id [launchpad account name]

这将通过HTTPS从启动板服务器下载公钥,从而保护您免受MITM攻击。

在Ubuntu Lucid之前的版本中,您可以使用以下方法完成此操作:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

echo需要该命令以在带有SSH密钥的行之后获得额外的换行符。


14

用于自定义端口

ssh-copy-id -i "user@hostname.example.com -p2222"

-i开关默认为〜/ .ssh / id_rsa.pub,如果需要另一个密钥,请将密钥路径放在-i之后

警告:如果您未编写-i,它将复制〜/ .ssh中找到的所有密钥。


1
您确定该警告吗?“ -i identity_file-仅使用identity_file中包含的密钥(而不是通过ssh-add(1)或default_ID_file查找密钥)。如果文件名未以.pub结尾,则添加该文件。如果文件名省略,则使用default_ID_file。”
Yousha Aleayoub 2015年

0

ssh-copy-id确实做到了。我不确定为什么这里的其他一些答案添加了不正确的信息。帮助显示以下内容:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help

我刚刚在具有CentOS 7.6服务器的Ubuntu 18.04客户端上尝试了以下操作,它的工作原理很吸引人。该示例显示了使用的自定义端口2222,并在处指定了公共密钥~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 myusername@hostname.tld

在运行命令之前,我实际上使用了-n最后的开关进行空运行,以确认该命令将按预期运行。确认后,无需-n切换即可再次如上所述运行命令。

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.