当服务器只允许公钥认证时如何 ssh-copy-id 2nd key

gon*_*one 10 ssh ssh-keys

[MacOS 10.12.6 主机,Ubuntu 14.04 LTS 来宾]

我有一个本地 VM 设置,只接受公钥身份验证。到目前为止,我一直在使用需要输入密码的密钥,而且这种安排工作正常。但是,我现在需要设置一个脚本来自动为我执行 scp。

由于我既不想让脚本暂停以提供密码,也expect不想自动执行此操作,因此我决定使用没有密码的第二个密钥。

在我看来,ssh-copy-id它无法处理这种情况,因为它使用-i参数来告诉它上传哪个密钥,因此我无法指定使用哪个密钥登录。

所以,我的问题是,如何首先ssh-copy-id接受用于登录的第二个密钥?我应该使用ssh-add吗?

(根据我上面的问题ssh-copy-id,我手动复制了密钥并将其添加到我的 authorized_keys 文件中。)

小智 11

ssh-copy-id将密钥附加到远程authorized_keys文件。要添加多个特定键,请使用-I <key-file-name>.

更新

在您发表评论后,我想我问错了您的问题。

您想在服务器上安装另一个密钥时使用一个密钥进行身份验证。

ssh-copy-id不提供命令行选项来选择在执行时进行身份验证的密钥ssh-copy-id

但它-o通过到ssh. 所以:

ssh-copy-id -i ~/.ssh/<your-new-id-to-install> -o 'IdentityFile ~/.ssh/<your-already-existing-id>' <servername>
Run Code Online (Sandbox Code Playgroud)

您也可以使用ssh-agent,在这种情况下,只要正在运行,您就不必在使用ssh, scp, ssh-copy-id, aso时输入密码ssh-agent

  • 问题是我需要能够登录才能上传密钥。但是,由于我将服务器配置为仅接受公钥登录,因此存在先有鸡还是先有蛋的情况。 (4认同)
  • 您的 ssh-copy-id 订单错误。它应该是 -i 中的新 ID 和 IdentityFile 区域中的现有/正在使用的 ID (2认同)

Hen*_*usa 7

我添加了同样的问题,所以我将分享我的成功故事,这是对 @sborsky 答案的改进。您不需要 ssh-agent 也不需要复杂的技巧。

在执行建议的命令时,我得到以下信息:

/usr/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on the remote system.
    (if you think this is a mistake, you may want to use -f option)
Run Code Online (Sandbox Code Playgroud)

事实上,是的,这是 ssh-copy 的错误。只需使用-f开关即可工作:

ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o 'IdentityFile ~/ssh-private-key.key' user@server.domain
Run Code Online (Sandbox Code Playgroud)

您将看到(除其他外)重要的一行:Number of key(s) added: 1

现在您将能够使用基于密钥的 SSH 身份验证进行连接:ssh user@server.domain