SSH IdentitiesOnly=yes 转发我的所有密钥

Mar*_*ean 13 ssh public-key-encryption ssh-agent

我一生都无法弄清楚为什么我的 SSH 配置转发了错误的密钥。我有两把钥匙,我们称它们为home_rsawork_rsa。我做了以下事情:

\n\n
eval `ssh-agent`\nssh-add -K ~/.ssh/home_rsa\nssh-add -K ~/.ssh/work_rsa\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的~/.ssh/config文件:

\n\n
Host home\n  ForwardAgent yes\n  HostName home.com\n  IdentityFile ~/.ssh/home_rsa\n  IdentitiesOnly yes\n  User home\n\nHost work\n  ForwardAgent yes\n  HostName work.com\n  IdentitiesOnly yes\n  IdentityFile ~/.ssh/work_rsa\n  User work\n\nHost bitbucket\n  IdentityFile ~/.ssh/home_rsa\n\nHost bitbucket-work\n  IdentityFile ~/.ssh/work_rsa\n\nHost bitbucket*\n  HostName bitbucket.com\n  User git\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我运行以下\xe2\x80\xa6时

\n\n
ssh work\nssh git@bitbucket.org\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6Bitbucket 报告我正在使用我的home用户,尽管我已经清楚地登录到我的work服务器并且应该转发我的work密钥。如果我以相反的顺序添加 SSH 身份并运行上面相同的代码,Bitbucket 会报告我正在使用我的work用户。ssh-add -l从我的服务器运行work,我看到两个 SSH 密钥都被转发,但这不是 的工作吗IdentitiesOnly yes

\n\n

真的很困惑这里发生了什么。

\n

Jak*_*uje 8

真的很困惑这里发生了什么。

ForwardAgent选项将连接转发到您的代理,其中包含所有密钥,并且不会将本地主机转发~/.ssh/config到远程主机。您在主机上执行的操作work由该主机上的配置控制。

你想用它做什么?

  • Bitbucket 不允许在 Bitbucket 帐户之间使用相同的 SSH 密钥。我有一个工作帐户和一个个人帐户。当我尝试推送/获取/合并等时,我希望远程服务器使用正确的 SSH 密钥。 (2认同)

Jon*_*mos 5

您需要首先在其网站上使用等效的 bitbucket 帐户更新您的 ssh 密钥(工作用户为work_rsa,用户为user_rsa)。那么也许这会有所帮助。

Host                bitbucket-work
HostName            bitbucket.org
IdentitiesOnly      yes
IdentityFile        ~/.ssh/work_rsa
User                work
Run Code Online (Sandbox Code Playgroud)

用法:

ssh bitbucket-work
Run Code Online (Sandbox Code Playgroud)


sam*_*mpi 5

正如已接受的答案中所写,选择用于身份验证的密钥与转发哪些密钥无关。需要单独的 ssh 代理。幸运的是,这很容易配置。

ssh-agent (1)中我们可以了解到它需要一个-a选项来指定bind_address,并且ssh_config (5)告诉我们ForwardAgent可以将其设置为相同的值。

准备你的代理:

eval `ssh-agent -a ~/.ssh/home.agent`
ssh-add ~/.ssh/home_rsa
eval `ssh-agent -a ~/.ssh/work.agent`
ssh-add ~/.ssh/work_rsa
unset SSH_AUTH_SOCK SSH_AGENT_PID
Run Code Online (Sandbox Code Playgroud)

配置你的 ssh:

Host work
    HostName      work.example.com
    ForwardAgent  ~/.ssh/work.agent
    IdentityAgent ~/.ssh/work.agent

Host home
    HostName      home.example.com
    ForwardAgent  ~/.ssh/home.agent
    IdentityAgent ~/.ssh/home.agent
Run Code Online (Sandbox Code Playgroud)

这应该完全分开家庭和工作钥匙。设置为与暴露于需要如此复杂的威胁级别的人员练习IdentityAgent不同的值。ForwardAgent