別のサーバー (B) 経由でのみアクセスできるリモート サーバー (A) にアクセスするための SSH トンネルを作成しようとしています。ローカル マシン (L) にはリレー サーバー (B) にアクセスするためのキーがあり、リレー サーバー (B) には宛先サーバー (A) にアクセスするための別のキーがあります。
[リレーサーバー(B)へのキーを持つローカルマシン(L)] --> [宛先サーバー(A)へのキーを持つリレーサーバー(B)] --> [宛先サーバー(A)]
私のローカルマシン(L)には、次のような ~/.ssh/config ファイルがあります。
Host relay.server(B)
Hostname relay.server
Port 22
User me
IdentityFile ~/.ssh/id_rsa
Host destination.server(A)
Hostname destination.server
Port 1122
User me
IdentityFile ~/.ssh/id_rsa
そして、次のようにしてトンネルを正常に動作させることができます。
ssh -N -L 1122:SERVER_PRIVATE_IP:22 relay.server(B)
ローカル マシン (L) で次のコマンドを実行します。最初のキーのロックを解除するためのパスワードの入力が求められ、その後ハングアップしたように見えます。プロンプトは返されません。-f
オプションを使用するか、で終わると&
パスワードを入力できなくなります。ただし、パスワードを^C
入力した後にこのコマンドを実行すると、ssh destination.server(A)
2 番目のキーのロックを解除するためのパスワードの入力が求められ、その後、宛先サーバー (A) に接続されます。
ローカル マシン (L) から宛先サーバー (A) に接続し、各キーのロックを解除するために必要なパスワードの入力を求める単一のコマンドを探しています。または、リレー サーバー (B) を介してローカル マシン (L) から宛先サーバー (A) に直接接続できるようにするための別の構成方法の提案もお願いします。
答え1
簡単に答えると、
ProxyCommand
nc
接続に使用するForwardAgent
鍵を渡す- 公開鍵が
.ssh/authorized_keys
すべてのサーバーに存在することを確認する
Host relay Hostname relay.server.fqdn.or.IP User me IdentityFile ~/.ssh/id_rsa ForwardAgent yes Host destination Hostname destination.server.fqdn.or.IP User me IdentityFile ~/.ssh/id_rsa ProxyCommand ssh -q relay "nc %h %p" ForwardAgent yes
長い部分。
ssh config のオプションProxyCommand
は、囲みが使用されるたびにコマンドを実行しますHost
。これは通常nc
、nmap.org から入手可能な (としても知られncat
、多くのオプションがあります)とともに使用されます。
Host destination
ssh config の上記のエントリでは、 ssh を静かに中継して実行する がProxyCommand
設定されていました。ssh -q relay "nc %h %p"
nc destination.server.fqdn.or.IP 22
nc
着信 ssh と宛先の間の接続を確立します。
はForwardAgent yes
、ssh にキーを ssh-agent に追加するよう指示します。ssh エージェントはキーを追跡し、必要に応じて正しいキーをホストに自動的に渡すために使用されます。は、ForwardAgent yes
エージェントにキーをリレー上の別のエージェントに渡し、その後再び宛先に渡すよう指示します。
これらすべてが機能するには、経由する各サーバーと最終的な宛先の.ssh/authorized_keys
ファイルに、秘密鍵 (id_rsa) に関連付けられた公開鍵が必要です。秘密鍵 id_rsa を作成したときに、公開鍵 id_rsa.pub も作成されているはずです。
公開鍵がない場合は、いつでも秘密鍵から取得してssh-keygen -y -f ~/.ssh/id_rsa
簡単にコピー/貼り付けできます。公開鍵にはスペースで区切られた2つまたは3つのフィールドがありますが、1つライン。
したがって、ssh relay
編集し~/.ssh/authorized_keys
(存在しない可能性があるため、mkdir -p ~/.ssh
必要な場合があります)、公開キーを新しい行 (存在しない場合は最初の行) に貼り付けます。
リレー サーバー上で、nc
/bin または /usr/bin に存在するかどうかを確認します。存在しない場合は、パッケージ マネージャー (yum または apt-get) を使用してインストールする必要があります。
リレーサーバーから、ssh destination
の同様の更新を実行します~/.ssh/authorized_keys
。
exit
ローカルマシンまで到達すれば、ssh destination
答え2
新しい OpenSSH バージョンProxyJump
では以下が許可されます.ssh/config
:
Host relay
Hostname relay.server.fqdn.or.IP
User me
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
Host destination
Hostname destination.server.fqdn.or.IP
ProxyJump relay
User me
IdentityFile ~/.ssh/id_rsa