it-swarm.cn

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

我在家里很懒,对家用机器使用密码验证。我准备转向基于密钥的身份验证。网上有很多关于如何做到这一点的选项,包括捕获然后将密钥翻过来,直接搜索密钥等。

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

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

329
Jorge Castro

ssh-copy-id命令(在openssh-client包中并默认安装)完成此操作:

ssh-copy-id [email protected]

将默认标识的公钥(使用-i identity_file用于其他标识)复制到远程主机。

默认标识是您的“标准”ssh密钥。它由~/.ssh目录中的两个文件(公钥和私钥)组成,通常名为identityid_rsaid_dsa,_ id_ecdsaid_ed25519(与.pub相同),具体取决于键的类型。如果您没有创建多个ssh密钥,则不必担心指定标识,ssh-copy-id将自动选择它。

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

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

ssh-copy-id "[email protected] -p <port-number>"
450
Marcel Stimberg

我喜欢马塞尔的答案。我不知道这个命令。我一直在使用我在 Sun网站 上找到的东西:

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"'
123
Huygens

图形方法

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

Set Up Computer for SSH Connection

27
ændrük

在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从Launchpad服务器下载公钥,以保护您免受MITM攻击。

在Ubuntu Lucid和之前,您可以通过以下方式完成相同的工作:

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

在使用SSH密钥的行之后获取额外的换行符需要echo命令。

18
Lekensteyn

用于自定义端口

ssh-copy-id -i "[email protected] -p2222"

-i开关默认为〜/ .ssh/id_rsa.pub,如果你想要另一个键,在-i之后放入键的路径

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

13
Omar A. Shaban

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>] ...] [[email protected]]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 [email protected]

在运行命令之前,我实际上使用了末尾的-n开关来进行干运行,这确认命令将按预期工作。一旦我确认它,我再次运行命令,没有-n开关。

0
isapir