我正在寻找一种简单的方法来从我的本地机器A,通过代理B,到目标主机C进行SSH。与C上的公共密钥一起使用的私钥在B上,而我不能把这个密钥放在我的本地机器上。 任何提示?
另外,我希望能够使用〜/ .ssh / config来做到这一点。
谢谢!
原理:
ssh ssh A ------> B ------> C ^ ^ using A's using B's ssh key ssh key
前提条件:
A
正在运行ssh-agent; A
可以访问B
; B
可以访问C
; B:~/.ssh/authorized_keys
存在B:~/.ssh/authorized_keys
B
的ssh公钥存在于C:~/.ssh/authorized_keys
在A的~/.ssh/config
中,添加
Host C ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'
如果B上的ssh私钥位于非标准位置,则在ssh-add
之后添加它的path。
您现在应该能够从A
访问C
:
A$ ssh C C$
检查以下是否正在工作。
ssh -t B ssh C
如果要使用存储在B上的密钥,请使用以下命令
ssh -t B ssh -i /path/to/identity_on_B C
在这里,我们指定的命令即ssh -i /path/to/identity_on_B C
将在B上执行,而不是loginshell。
我现在已经完成了。 这是解决scheme,这是相当简单的。 我早该看见它了:
的〜/ .ssh /configuration:
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
'B'是您正在跳过的代理服务器。 它应该像通常configuration对服务器的访问一样进行configuration。
'C'是目标主机。 它需要被configuration为在连接过程中使用“B”。 'C'中的标识文件是'B'上的ssh-key的path。 ProxyCommand使用Netcat从“B”打开连接到“C”。 Netcat或NC需要安装在'B'上。
希望这可以帮助别人。
我写了一个简单的脚本来基本列出远程实例上的ssh密钥,然后将我select的一个添加到本地ssh代理中。 这不是很干净,但允许我把所有的钥匙保存在远程位置,而不是本地。
如果任何人感兴趣,这是脚本:
#!/usr/bin/ruby require "rubygems" require "fileutils" # Get key list key_list = (`ssh jumpbox "cd ~/.ssh/ ; ls id_rsa*" | sed 's/id_rsa_/ /g' | sed 's/id_rsa//g'`) puts ' ' puts 'Available customer keys:' puts key_list # Get customer name input puts ' ' puts 'Enter customer name: ' customer_name = gets.chomp # Add key to ssh-agent key_name = "~/.ssh/id_rsa_#{customer_name}" puts ' ' puts "Adding #{key_name} to local ssh-agent" `ssh jumpbox "ssh-add ~/.ssh/id_rsa_#{customer_name}"` exit 0
#!/usr/bin/env bash target_host=10.121.77.16 target_port=22 target_user=vagrant bastion_user=yourusername bastion_host=10.23.85.245 bastion_port=32780 scp -P $target_port -o ProxyCommand="ssh -o 'ForwardAgent yes' $bastion_user@$bastion_host -p $bastion_port 'ssh-add ~/.ssh/*.rsa && nc %h %p'" /tmp/x.txt $target_user@$target_host:/tmp/
去做:
ssh someuser@IP_D
这样
A -> B-> C -> D
其中A是您所在的主机,
编辑你的本地〜/ .ssh / config像这样:
Host IP_D ProxyCommand ssh -o 'ForwardAgent yes' userX@IP_C 'ssh-add && nc %h %p' Host IP_C ProxyCommand ssh -o 'ForwardAgent yes' userY@IP_B 'ssh-add && nc %h %p'
这个答案是基于select的答案。 我必须弄清楚各种用户如何适应整个场景。
这对我有用。 HTH。