使用相同的 SSH 密钥连接到远程服务器并从该服务器推送到 GitHub

使用相同的 SSH 密钥连接到远程服务器并从该服务器推送到 GitHub

我已经生成了 SSH 密钥对,用于登录到我的远程服务器。我还添加GitHub 中有相同的公钥。因此,从我自己的机器上,我可以通过 SSH 访问 GitHub:

你好,hdodov!您已成功验证身份,但 GitHub 不提供 shell 访问权限。与 github.com 的连接已关闭。

这意味着我可以在我的 GitHub 帐户中克隆私有存储库在我的本地机器上


由于我使用相同的密钥对两个 GitHub 进行身份验证我的服务器,是否可以使用相同的密钥来克隆存储库在服务器上,同时通过 SSH 连接到它?如果我尝试这样做,我会得到:

[电子邮件保护]:权限被拒绝(公钥)。

这是有道理的,因为我在远程服务器上没有私钥 - 它在我的本地机器上。但由于我首先使用该密钥连接到服务器,因此我已证明我拥有它,所以我不应该直接从存储库中提取吗?

是的,我可以将私钥复制到服务器上,但通过互联网传输对我来说不是一个好主意。或者也许在多个地方使用同一个密钥进行身份验证才是更大的问题?我应该有单独的密钥吗?

答案1

您可能正在寻找的是:

  1. 在您的 ssh 客户端机器上运行 ssh 身份验证代理(ssh-agent);
  2. 并将 ssh 代理连接转发到服务器(-A 命令行或 ForwardAgent 配置文件选项)。

这样,您将能够在服务器上使用主机本地的密钥,而无需将它们物理复制到那里。

答案2

如果在 ssh_config 中设置了 AddKeysToAgent(默认情况下没有设置)或者您在命令行中请求它,ssh 本身将添加它使用的密钥。这意味着如果您想使用相同的密钥向服务器进行身份验证,然后稍后在服务器上进行身份验证,则不需要 ssh-add。您可以执行以下操作:

# with agent already running

ssh -A -o AddKeysToAgent=yes …

相关内容