解決策 1:
回路図:
ssh ssh
A ------> B ------> C
^ ^
using A's using B's
ssh key ssh key
前提条件:
A
ssh-agent を実行しています。A
B
にアクセスできます;B
C
にアクセスできます;A
の ssh 公開鍵はB:~/.ssh/authorized_keys
にありますB
の ssh 公開鍵はC:~/.ssh/authorized_keys
にあります
~/.ssh/config
で A
で 、追加
Host C
ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'
B の ssh 秘密鍵が非標準の場所にある場合は、そのパスを ssh-add
の後に追加します .
C
にアクセスできるはずです。 A
から :
A$ ssh C
C$
解決策 2:
以下が機能しているかどうかを確認してください。
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 で実行されます。
解決策 3:
私は今これを解決しました。これが解決策です。これはかなり簡単です。もっと早く見ておくべきだった:
~/.ssh/config:
Host B
HostName 1.2.3.4
User myuser
IdentityFile ~/.ssh/rsa_key
ControlMaster auto
ControlPath ~/.ssh/socket/master-%l-%[email protected]%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」は、ジャンプしているプロキシ サーバーです。サーバーへのアクセスを通常設定するのと同じように設定する必要があります。
「C」は宛先ホストです。接続プロセスで「B」を使用するように構成する必要があります。 「C」の ID ファイルは、「B」の ssh キーへのパスです。 ProxyCommand は、Netcat を使用して「B」から「C」への接続を開きます。 'B' には Netcat または nc をインストールする必要があります。
注 1:これを機能させるには、B の ID ファイル (通常は ~/.ssh/rd_isa) を A にコピーする必要があります。私は通常、その名前を rd_isa_B に変更します。
注 2:このソリューションは scp でも機能します。
これが他の人に役立つことを願っています。
解決策 4:
基本的に、リモート インスタンスの ssh キーを一覧表示し、選択したキーをローカルの 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
解決策 5:
スノーボールの答えは大いに役立ちました。ただし、コマンドにいくつかの変更を加えたので、それがどのように機能するかを説明したいと思いました。この状況を考えると:
ssh ssh
A -------> B -------> C
^ ^
using A's using B's
ssh key ssh key
~/.ssh/config
を変更します ファイルを開き、ホスト B
を追加します ジャンプしたい場所、通常のホストの構成方法:
Host B
User myusername
HostName b.mycompany.com
次に、ホスト 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'
ProxyCommand
に注意してください 、ここで:
ssh -T -q
疑似 TTY (-T
) を割り当てる必要がないことを示します。 ) 静かにしてください (-q
);- ジャンプ ホスト
B
で一度 、A
の SSH キーにキーを追加しますssh-add
まで; - これは、
-o 'ForwardAgent yes'
を使用して SSH エージェントを転送したためにのみ機能します . ssh-add -t 1
最終ホスト C への認証に必要な 1 秒間だけキーを追加することを示します;- そして最後に
nc %h %p
netcat
を開始します 最終ホスト%h
への接続 ポート%p
で (両方とも~/.ssh/config
の情報に基づいて SSH によって入力されます) ファイル)
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'