2 つのリモート ホストがあり、それぞれに一意のポート番号があり、SCP コマンドを使用するときに両方を示す必要がある場合があります。最初のポート番号に一意の (22 以外の) ポート番号を指定しても問題ありませんが、2 番目のポート番号を指定する方法がわかりません。
これが今の様子です -
scp -P 1234 username@site.com:/path/to/file username2@site2.com:/path/to/directory
2 つのリモート ホストがあり、それぞれに一意のポート番号があり、SCP コマンドを使用するときに両方を示す必要がある場合があります。最初のポート番号に一意の (22 以外の) ポート番号を指定しても問題ありませんが、2 番目のポート番号を指定する方法がわかりません。
これが今の様子です -
scp -P 1234 username@site.com:/path/to/file username2@site2.com:/path/to/directory
質問で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 バイトのストリームを生成する他の方法があります。
引数でこれを行う方法はわかりませんが、 ~/.ssh/config を編集してみてください
Host test
HostName test.com
Port 22000
User me