ローカルマシン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
にアクセスできます。A
のssh公開鍵は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
の後にそのパスを追加します。
これで、C
からA
にアクセスできるようになります。
A$ ssh C
C$
以下が機能しているか確認してください。
ssh -t B ssh C
Bに保存されているキーを使用する場合は、次のコマンドを使用します。
ssh -t B ssh -i /path/to/identity_on_B C
ここでは、ログインシェルの代わりにBで実行するコマンド、つまりssh -i /path/to/identity_on_B C
を指定しています。
私はこれを今解決しました。これが解決策です。これはかなり単純です。私はもっと早くそれを見ていたはずです:
〜/ .ssh/config:
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」は、ジャンプするプロキシサーバーです。通常、サーバーへのアクセスを構成する場合と同様に構成する必要があります。
「C」は宛先ホストです。接続プロセスで「B」を使用するように構成する必要があります。 「C」のIDファイルは、「B」のsshキーへのパスです。 ProxyCommandは、Netcatを使用して、「B」から「C」への接続を開きます。 Netcat、またはncは「B」にインストールする必要があります。
これが他の人を助けることを願っています。
基本的にリモートインスタンスの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
#!/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 ssh
A -------> B -------> C
^ ^
using A's using B's
ssh key ssh key
~/.ssh/config
ファイルを変更して、ジャンプしたいHost B
を追加します。これは、通常のHostの構成方法と同じです。
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-add
のSSHキーにキーを追加します。-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'
実行するには:
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'
この回答は、選択した回答に基づいています。さまざまなユーザーがシナリオ全体にどのように適合するかを理解する必要がありました。
これでうまくいきます。 HTH。