Sno*_*all 104
示意图:
ssh ssh
A ------> B ------> C
^ ^
using A's using B's
ssh key ssh key
Run Code Online (Sandbox Code Playgroud)
先决条件:
A 正在运行 ssh-agent;A可以访问B;B可以访问C;A的 ssh 公钥存在于 B:~/.ssh/authorized_keysB的 ssh 公钥存在于 C:~/.ssh/authorized_keys在~/.ssh/config上A,加
Host C
ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'
Run Code Online (Sandbox Code Playgroud)
如果您在 B 上的 ssh 私钥位于非标准位置,请将其路径添加到ssh-add.
您现在应该能够访问C来自A:
A$ ssh C
C$
Run Code Online (Sandbox Code Playgroud)
Sac*_*kar 35
检查以下是否有效。
ssh -t B ssh C
Run Code Online (Sandbox Code Playgroud)
如果要使用存储在 B 上的密钥,请使用以下命令。
ssh -t B ssh -i /path/to/identity_on_B C
Run Code Online (Sandbox Code Playgroud)
在这里,我们指定ssh -i /path/to/identity_on_B C要在 B 上执行的命令 ie ,而不是在登录 shell 上执行。
wra*_*ler 12
我现在已经解决了这个问题。这是解决方案,这是相当简单的。我应该早点看到它:
~/.ssh/配置:
Host B
HostName 1.2.3.4
User myuser
IdentityFile ~/.ssh/rsa_key
ControlMaster auto
ControlPath ~/.ssh/socket/master-%l-%r@%h:%p
Host C.*
User customer_username
Port customer_port
IdentityFile remote/path/to/ssh/key
ForwardAgent yes
ProxyCommand ssh accessable.server nc %h %p
Host C.server-1
HostName 2.3.4.5
Run Code Online (Sandbox Code Playgroud)
'B' 是您要跳过的代理服务器。它应该像您通常配置对服务器的访问一样进行配置。
'C' 是目标主机。它需要配置为在连接过程中使用'B'。“C”中的身份文件是“B”上 ssh-key 的路径。ProxyCommand 使用 Netcat 打开从“B”到“C”的连接。需要在“B”上安装 Netcat 或 nc。
NOTE1:要做到这一点,您需要将 B 的身份文件(通常是 ~/.ssh/rd_isa)复制到 A。我通常将其名称更改为 rd_isa_B。
注2:此解决方案也适用于 scp。
希望这对其他人有帮助。
雪球的回答很有帮助。不过,我对该命令做了一些修改,并想解释它是如何工作的。鉴于这种情况:
ssh ssh
A -------> B -------> C
^ ^
using A's using B's
ssh key ssh key
Run Code Online (Sandbox Code Playgroud)
修改文件并添加要跳转的~/.ssh/config主机,就像通常配置主机一样:B
Host B
User myusername
HostName b.mycompany.com
Run Code Online (Sandbox Code Playgroud)
C然后添加您想要结束的主机:
Host C
User myusername
HostName c.intranet.mycompany.com
ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'
Run Code Online (Sandbox Code Playgroud)
请注意ProxyCommand, 其中:
ssh -T -q指示它不应分配伪 TTY ( -T) 并保持安静 ( -q) ;B,我们将密钥添加到Athrough的 SSH 密钥中ssh-add;-o 'ForwardAgent yes'。ssh-add -t 1表示我希望仅在向最终主机 C 进行身份验证所需的 1 秒内添加密钥;nc %h %p启动netcat与最终主机%h端口的连接%p(两者都将由 SSH 根据文件中的信息填写~/.ssh/config)。如果您需要指定要使用的自定义键B,可以通过修改以下ssh-add部分来实现:
Host C
User myusername
HostName c.intranet.mycompany.com
ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 ~/.ssh/mykey && nc %h %p'
Run Code Online (Sandbox Code Playgroud)