默认情况下,ssh-copy-id -i blah.pub user@host 是使用-i指定的公钥的私钥形式登录,还是使用~/.ssh/id_rsa?”

默认情况下,ssh-copy-id -i blah.pub user@host 是使用-i指定的公钥的私钥形式登录,还是使用~/.ssh/id_rsa?”

,是ssh-copy-id -i blah.pub user@host用-i指定的私钥的公钥形式登录,还是用登录~/.ssh/id_rsa?”

如果答案是使用~/.ssh/id_rsa / SSH默认使用的密钥登录,而不是使用-i指定的公钥的私钥形式登录,为什么这里会出错?

我有一对私钥和公钥,分别是 rodney 和 rodney.pub。如果我将文件 rodney 重命名为 roddney,然后执行 ssh-copy-id -i ./rodney.pub user@ip,我希望它能够登录并附加内容,尽管我收到错误“错误:无法打开 ID 文件 './rodney':没有此文件”。如果我将 roddney 重命名为 rodney,则不会收到该错误。如果 ssh-copy-id 所做的只是 ssh(默认情况下使用 id_rsa 登录),然后复制 rodney.pub,那么为什么 ssh-copy-id 需要或关心私钥 rodney?

答案1

ssh-copy-id -i blah.pub user@host 是否使用-i指定的公钥的私钥形式登录,还是使用~/.ssh/id_rsa登录?”

它不会使用-i指定的公钥的私钥形式登录。

它使用 ssh 默认使用的密钥登录。~/.ssh/id_rsa,(虽然如果 ssh-agent 正在运行,那么 ssh 可能会尝试其他密钥,但无论如何……它不会使用 -i 指定的公钥的私钥形式登录)。让我们假设您没有运行 ssh-agent,我认为这也是问题中的假设。

如果答案是使用~/.ssh/id_rsa / SSH默认使用的密钥登录,而不是使用-i指定的公钥的私钥形式登录,为什么这里会出错?

我有一对私钥和公钥,分别是 rodney 和 rodney.pub。如果我将文件 rodney 重命名为 roddney,然后执行 ssh-copy-id -i ./rodney.pub user@ip,我希望它能够登录并附加内容,尽管我收到错误“错误:无法打开 ID 文件 './rodney':没有此文件”。如果我将 roddney 重命名为 rodney,则不会收到该错误。如果 ssh-copy-id 所做的只是 ssh(默认情况下使用 id_rsa 登录),然后复制 rodney.pub,那么为什么 ssh-copy-id 需要或关心私钥 rodney?

不久前我和一位 ssh 专家讨论过这个问题。

我的用例是,我有一台笔记本电脑和一些 VPS,我想让一个 VPS 通过 SSH/SFTP 连接到所有其他 VPS。我的笔记本电脑已经可以通过 SSH 访问所有 VPS。

我本可以在笔记本电脑上生成密钥对,然后通过 ssh-copy-id 将公钥发送到所有 VPS。然后将我从笔记本电脑生成的私钥移动或复制到第一个 VPS 上。

但是我做了什么(这导致了一个让我困惑并让我询问的错误),我在笔记本电脑上生成了密钥对,我将生成的私钥从笔记本电脑复制到第一个 VPS。然后我从笔记本电脑中删除了该私钥,因为我认为(错误地)我不再需要它在笔记本电脑上。因为(我实际上正确地认为)ssh-copy-id 不会使用它来登录我的任何 VPS。所以我这样做了,ssh-copy-id -i blah.pub user@IPofFirstVPS 结果出现了错误。

ssh-copy-id 确实需要密钥对,因此,需要私钥和公钥。

因此,如果您ssh-copy-id -i blah.pub user@host 这样做,它会期望指定的公钥文件的私钥形式。

如果您要这样做ssh-copy-id blah,它会将 .pub 写入文件名并执行 ssh-copy-id blah.pub。因此,不妨将 .pub 放在末尾,即指定公钥文件名而不是私钥文件名。

但是它需要私钥只是一种“安全检查”。从某种意义上说,它只是在执行操作之前进行的测试,将公钥附加到远程 authorized_keys 文件。理论上,它甚至不必进行该检查即可进行登录和附加。

它预期/猜测,也可能猜错了,将来你可能会从你执行 ssh-copy-id 的那台机器通过 SSH 连接到远程主机,使用你指定的公共 id 的私钥形式,因此你需要在运行 ssh-copy-id 的机器上使用该私钥!(它不认为也许你生成密钥对是为了在其他机器上使用该私钥,而只是在你所在的机器上使用 ssh-copy-id,因为那台机器可以通过 ssh 访问你的许多其他机器)。

ssh-copy-id 不使用公钥对的私钥形式登录。

ssh-copy-id 确实有一个选项 -o,您可以在其中指定用于登录的私钥。

我没有设置 ssh-agent,所以我的 ssh 使用私钥 ~/.ssh/id_rsa 连接,而 ssh-copy-id 将使用该私钥登录,无论 -i 中指定的公钥是什么。但它仍将检查 -i 中指定的公钥的私钥文件名是否存在!

ssh-copy-id 是一个脚本,例如它甚至以此脚本开头,#!/bin/sh因此熟悉脚本的人甚至可以对其进行 cat/vim 并检查和查看。

相关内容