0

2 つのリモート ホストがあり、それぞれに一意のポート番号があり、SCP コマンドを使用するときに両方を示す必要がある場合があります。最初のポート番号に一意の (22 以外の) ポート番号を指定しても問題ありませんが、2 番目のポート番号を指定する方法がわかりません。

これが今の様子です -

scp -P 1234 username@site.com:/path/to/file username2@site2.com:/path/to/directory
4

2 に答える 2

1

質問でscpを実行している方法では、最初のホストでscpプログラムを呼び出し、ファイルを2番目のホストに送信するように指示します。ssh好きなように、最初のホストで scp コマンドを実行するために直接呼び出すことができます。

ssh -p1234 user1@host1 'scp -P2345 /path/to/file user2@host2:/path/to/directory'

最初のホストが 2 番目のホストに直接接続できない場合、通常は scp オプションを使用して、-3ローカル ホスト経由で最初のホストから 2 番目のホストにデータを送信します。あなたがその立場にいるなら、一種のハックですが、scpがその種の転送を実行する方法をエミュレートできます:

yes "" | tr '\n' '\0' |
    ssh -p1234 user1@host1 'scp -f /path/to/file' |
    ssh -p2345 user2@host2 'scp -t /path/to/directory'

これは、SCP プロトコルの仕組みに基づいています。最初のssh行は、最初のリモート ホストで「リモート ソース」モードで scp を実行し、ソース ファイルを送信します。2ssh行目では、2 番目のホストで「リモート シンク」モードで scp を実行し、ファイルを受信して​​ディレクトリに書き込みます。「リモート ソース」と「リモート シンク」はscp、それぞれファイルの送受信時にリモート システムで通常実行されるものです。

このyes "" | tr '\n' '\0' |行は、プロトコルが機能するために必要な NUL (Ascii 0) バイトのストリームを作成します。インスタンスはscp -fこれらを読み取り、それらなしではファイルを送信しません。必要に応じて、NUL バイトのストリームを生成する他の方法があります。

于 2015-05-19T17:10:09.590 に答える
-1

引数でこれを行う方法はわかりませんが、 ~/.ssh/config を編集してみてください

Host test
  HostName test.com
  Port 22000
  User me
于 2015-05-19T09:35:47.283 に答える