从A到B到C的SSH,使用B上的私钥

我正在寻找一种简单的方法来从我的本地机器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。