假设我有两台服务器:jump
和target
。jump
我有:
jump:~/.ssh/config
:
Host target
User targetuser
HostName actual-target-hostname.fqdn
IdentityFile ~/.ssh/target_rsa
... 在我的客户端机器上我想这样做ssh -J jump target
。但是,这行不通,因为一旦jump
建立了连接,ssh 就会尝试直接连接target
,而不是使用上面文件中的属性config
。我如何让它加载/使用该配置文件?我不想将该(大型)配置文件分发到(许多)客户端机器,我宁愿在跳转主机上仅定义一次该配置。
答案1
在我完成对互联网其余部分的挖掘之前,我已经对这个问题投了赞成票,因为我在尝试让代理/堡垒对目标使用不同的用户名时遇到了类似的问题。事实证明,每个 ssh 连接/命令/配置选项都会仅有的使用原始客户端的配置/命令/配置选项。
就我而言,我想去
username@local -> root@proxy -> admin@target
只需ssh target
使用此配置local
:
Host *
AddKeysToAgent yes
IdentitiesOnly yes
IdentityFile ~/.ssh/id_ed25519
User username
ForwardAgent yes
Host proxy [proxy's IPv4]
Hostname [proxy's FQDN]
User root
Host target [target's IPv4]
Hostname [target's FQDN]
User admin
ProxyJump proxy
不幸的是,它总是会使用错误的用户名,我花了一段时间才弄清楚,因为它username
存在于所有三个主机上。
对我来说,解决方法是移至Host *
配置末尾。显然,我误以为后面的指令会覆盖*
,但事实并非如此