
2つのリモートノードがあり、あるノードから別のノードにファイルを送信しようとしています。
scp remote1:~/testSCP [email protected]:~/
~/ssh/config
ポートがデフォルトで使用されるようにローカルコンピュータに設定しました2222
。
22
ただし、ssh設定では、remote1のデフォルトのsshポートがportの代わりにportに設定されます2222
。したがって、SSHを介して外部接続を行うには、デフォルトで22
そのポートを使用します。
私は成功せずに次のことを試しました。
scp -P 2222 remote1:~/testSCP [email protected]:~/
また、以下を試しましたが、うまくいきませんでした。
scp remote1:~/testSCP -P 2222 [email protected]:~/
これらの両方について、次のエラーが発生します。
ssh: connect to host 10.0.1.10 port 22: Connection refused
lost connection
portの代わりに10.0.1.10
portが使用されるため、これは正しいです。2222
22
2222
10.0.1.10
(remote2)にファイルを送信しようとしたときにremote1が使用するポートをどのように指定しますかremote1
?
修正する
試した後
scp -3 remote1:~/testSCP [email protected]:~/
私は奇妙に行動しています。パスワードが正しい場合でも、次のような結果が表示されます。
[email protected]'s password: [email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
まだキーレス認証を有効にしていません。
新しいアップデート
さまざまな方法を試した後、スクリプトのlocalhostからRemote1にSSHを介して接続し、Remote1からRemote2に、次にRemote1からRemote2にSSHを介して接続できました。しかし、これは私の質問には答えません。自分のローカルコンピュータで直接これを実行してから、2つのインスタンス間でファイルを転送する予定です。 2 つのインスタンスの ssh デーモンが ssh 接続にデフォルトポート以外のポートを使用する場合、これはサポートされていないようです。
答え1
単純なリモートリモートscp [1]ではこれを行うことはできません。
代わりに、最初のリモートホストにSSHを介して接続し、そこからポートパラメータを使用してscpを実行してください。
ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2
scp
現在行っていることを正確に実行したい場合は、-n -x -oClearAllForwardings=yes
オプションを追加することもできますが、ssh
通常は必要ありません。
[1]:最新バージョンはscp
代わりにuri仕様(ポートを含む)をサポートしていますが、オプション(「localhost経由」)をhost:path
使用している場合にのみサポートされます。-3
だからあなたはおそらく使用することができます
scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2
(/
以下はhost[:port]
パスの一部ではありません。ホームディレクトリで参照されますscp://user@host/file
。)./file
user
しかし、localhostを介したコピーは遅く、私の経験上エラーは隠されています。たとえば、/foo/bar/baz
ファイルを生成できなくてもエラーメッセージは印刷されません。
scp -3 localhost:.bashrc localhost:/foo/bar/baz
私はこれについて深く扱っていませんでした。ただ避けました;-)
誰もがこれらすべてを信じていない場合は、一度見てください。ソースコード:
void
toremote(char *targ, int argc, char **argv)
{
...
} else if (host) { /* standard remote to remote */
if (tport != -1 && tport != SSH_DEFAULT_PORT) {
/* This would require the remote support URIs */
fatal("target port not supported with two "
"remote hosts without the -3 option");
}
このtport
変数はuri解析でのみ設定され、scp://
7.6p1(2017年10月)より前のバージョンにはまったく存在しません。
答え2
効果的な方法の1つは、エイリアスを設定することです。~/.ssh/config
例えば、
Host destination
Hostname 10.0.1.10
User remote2
Port 2222
これで「ホスト名」として使用できるようになり、destination
実際のコマンドでホスト名/ユーザー/ポートを指定する必要はありません。