.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>