ローカルマシン A から 経由でジャンプホストサーバー B に SSH 接続できますssh B
。
サーバー C はアドレス指定可能 (アドレスは C.internal) であり、 経由で B からアクセスできますssh C
。
ローカルマシンから直接 C に SSH 接続するにはどうすればいいですか?
SSH コマンドと設定ファイルはどのようになるでしょうか?
A の ssh 設定:
Host B
User userB
HostName B.example.com
IdentityFile ~/.ssh/keyB
B の ssh 設定:
Host C
HostName C.internal
User userC
IdentityFile ~/.ssh/keyC
~/.ssh/keyC
ホスト B からローカル マシン A にコピーせずにこれを行うことは可能ですか?
答え1
いくつかのオプションがありますが、どれも「単一コマンド」ではありません。
B に対して SSH コマンドを実行して、C に対して 2 番目の SSH コマンドを実行することもできます。-t
対話型 SSH で動作させるには、オプションを追加する必要があります。
ssh -t hostB "ssh hostC"
ssh -t hostB "ssh -t hostC htop"
ssh hostB ssh hostC ls -la /etc
AからCへ「直接」SSH接続したい場合は、ssh-agent接続を転送するための追加の装置が必要になります。Bからローカル システムに対して (つまり、ssh -A
通常の場合の逆の動作)。
ホスト B に SSH で接続し、手動で指定したパスで ssh-agent を起動します。SSH の「ストリーム転送」機能を使用して、ローカル クライアントがリモート エージェント プロセスにアクセスできるようにします。
HostA$ ssh -t -L /tmp/agent:/tmp/agent HostB \ "ssh-agent -a /tmp/agent sh -c 'ssh-add ~/.ssh/keyC && sleep infinity'"
(ssh/config オプションは です
LocalForward
。)上記の接続が実行されている限り、HostB にのみ存在するキーを使用して、通常の ProxyJump 構成で HostA から HostC に接続できます。
HostA$ export SSH_AUTH_SOCK=/tmp/agent HostA$ ssh -J HostB HostC
(ssh/config オプションは
IdentityAgent
とですProxyJump
。)
もう一つの選択肢は、keyC
BからAにコピーして保存することです安全なハードウェアTPM チップやスマートカード (PIV モードの Yubikey も対象) など。これにより、キーが盗まれる可能性なしに、マシン A 上でローカルにキーを使用できるようになります。
tpm2-pkcs11
(Linux 上の TPM2.0 の場合は、または のいずれかを選択できます。Windowsssh-tpm-agent
上の TPM2.0 は、PuTTY-CAC 経由で使用できます。PIV 付きの Yubikey の場合は、Windows と Linux の両方に PKCS#11 モジュールがあります。私は、eBay の eToken 5110 を使用しています。SSH で FIDO2 キーを使用する方法もありますが、新しいキーを生成する必要があります。)
答え2
/etc/ssh/ssh_config
globalまたは as user のような ssh_config ファイルが必要です~/.ssh/config
:
Host B
HostName 10.0.0.1
User username_on_B
IdentityFile ~/.ssh/id_rsa_for_B
ForwardAgent yes
# final destination
Host C
HostName C.internal
User your_username_on_C
ProxyJump B
IdentityFile ~/.ssh/id_rsa_for_C
今、 からA
、 を行うことができますssh
C
。