.ssh/config
で次のことをお勧めします :
Host C
User user
ProxyCommand ssh -W %h:%p [email protected]
ホスト B が信頼されておらず、scp と sftp で動作する場合は、あまり安全ではありません。
この回答で説明されているように、 ProxyCommand
を使用できます ssh
を持つディレクティブ ホストは、3 番目のホストに透過的にバウンスします:
次の 3 つのホストがあるとします:
workstation.example.com
- これは、物理的に作業しているマシンですproxy.example.com
- これは、SSH トラフィックをルーティングしているマシンですendpoint.example.com
- これは、トラフィックが最終的に到達する場所です
~/.ssh/config
で workstation
で 、以下を追加:
Host endpoint
User endpointUser # set this to the username on the endpoint host
HostName endpoint.example.com
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
proxy
について ホスト、nc
を確認してください (netcat) がインストールされています。
次に、workstation
で 、 ssh endpoint
できます または sftp endpoint
プロキシ ホストを介してマシンに透過的にプロキシされます。 scp
も機能します。
認証に証明書を使用する必要がある場合でも、比較的簡単に実行できます (AWS 環境では一般的です)。
以下のコマンドは、server2 の remotePath から localPath のマシンにファイルを直接コピーします。内部的に、scp リクエストは server1 経由でプロキシされます。
scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>
代わりにパスワード認証を使用する場合は、試してみてください
scp -o ProxyCommand="ssh -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>
両方のサーバーで同じユーザー認証情報を使用する場合:
scp -o ProxyCommand="ssh -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>