自宅から仕事用のコンピューターにSSHで接続するために、それをC
と呼びましょう。次のようにする必要があります。
ssh -t user@B ssh C
Bは自宅から接続できるサーバーですが、CはBからしか接続できません。これは問題なく動作します。
Cにあるファイルをscp
を使用して自宅のコンピューターにコピーする場合、自宅のコンピューターからどのコマンドが必要ですか?
.ssh/config
:
Host C
User user
ProxyCommand ssh -W %h:%p user@B
ホスト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 user1@server1" user2@server2:/<remotePath> <localpath>
代わりにパスワード認証を使用する場合は、
scp -o ProxyCommand="ssh -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>
両方のサーバーで同じユーザー資格情報を使用する場合:
scp -o ProxyCommand="ssh -W %h:%p commonuser@server1" commonuser@server2:/<remotePath> <localpath>