如果第二跳需要不同的用户,是否可以使用 SSH 代理连接到 Web 服务器,然后连接到 git 服务器?
如果我明确传递用户名它就会起作用。
$ ssh web.example.com
# connects
> ssh -T [email protected]
> # connects
如果我依靠 SSH 配置来设置用户,它不起作用。
$ ssh web.example.com
# connects
> ssh -T git.example.com
> # permission denied
这是我的机器上的 SSH 配置。
Host web.example.com
User blue
ForwardAgent yes
Host git.example.com
User yellow
在调试输出中,它表示blue
即使配置将用户设置yellow
为主机,也要进行身份验证。
debug1: Authenticating to git.example.com:22 as 'blue'
为什么它使用错误的用户?我不想对用户进行硬编码,因为这样整个团队就无法使用相同的部署脚本。
答案1
我更喜欢在我的配置文件中明确设置所有设置,~/.ssh/config
并为每台主机指定一个简短的别名。这样我就不需要使用任何命令行标志,只需输入 less 即可ssh Destination
完成。
Host web
Hostname web.example.com
User blue
ForwardAgent yes
AddKeysToAgent yes
UseKeychain yes # Specific to OS X
IdentityFile ~/.ssh/id_rsa.blue
Host git
Hostname git.example.com
User yellow
ForwardAgent yes
AddKeysToAgent yes
UseKeychain yes # Specific to OS X
IdentityFile ~/.ssh/id_rsa.yellow
ProxyJump web
ProxyJump
是一个相对较新的设置,我发现它比 更直观ProxyCommand
。现在ssh git
将执行您所需的操作,首先创建一个会话,使用[email protected]
作为第一跳,然后使用 隧道传输到下一跳[email protected]
。
您也可以直接从命令行使用 ProxyJump 命令:
ssh -J [email protected] [email protected]