web-dev-qa-db-ja.com

中間マシンを介してscpする方法?

自宅から仕事用のコンピューターにSSHで接続するために、それをCと呼びましょう。次のようにする必要があります。

ssh -t user@B ssh C

Bは自宅から接続できるサーバーですが、CはBからしか接続できません。これは問題なく動作します。

Cにあるファイルをscpを使用して自宅のコンピューターにコピーする場合、自宅のコンピューターからどのコマンドが必要ですか?

13
Lembik

.ssh/config

Host C
    User user
    ProxyCommand ssh -W %h:%p user@B

ホストBが信頼されておらず、scpとsftpで動作する場合、私はそれほど安全ではありません。

17
user2233709

この答え で説明されているように、ProxyCommandディレクティブを使用して、sshホストに3番目のホストに透過的にバウンスさせることができます。

次の3つのホストがあるとします。

  • workstation.example.com-これは物理的に作業しているマシンです
  • proxy.example.com-これは、SSHトラフィックをルーティングするマシンです
  • endpoint.example.com-トラフィックが最終的に到達する場所です

~/.ssh/configworkstationに以下を追加します。

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)がインストールされていることを確認します。

その後、workstationssh endpointまたはsftp endpointすると、プロキシホスト経由でマシンに透過的にプロキシされます。 scpも機能します。

10
DopeGhoti

認証に証明書を使用する必要がある場合でも(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>
5
user1687718