ファイルを相互に送信しようとしているリモートノードが2つあります。
scp remote1:~/testSCP [email protected]:~/
ローカルマシンに~/ssh/config
を設定しているので、デフォルトでポート2222
を使用しています。
ただし、sshconfigではremote1 “のデフォルトのsshポートがポート2222
ではなく22
に設定されています。 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
10.0.1.10
はポート2222
を使用しており、ポート22
。
iv id = “にファイルを送信しようとするときに、ポート2222
を使用するようにremote1を指定するにはどうすればよいですか。 da7b a97dd6 “>
(remote2)from 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:
キーレス認証をまだ有効にしていません。
新しいアップデート
いくつかの方法で試した後、ローカルホストからssh経由でremote1にログインし、remote1からremote2にscpすることで、スクリプトでそれを行うことができました。しかし、これは私の質問に答えません。ローカルマシンから直接実行してから、2つのインスタンス間でファイルを転送するつもりでしたが、2つのインスタンスのsshデーモンがssh接続のデフォルトとは異なるポートを使用している場合はサポートされていないと思います。
コメント
回答
単純なリモートからリモートへの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仕様(ポートを含む)をサポートしますhost:path
の代わりに、-3
オプション(「ローカルホストを通過する」)を使用する場合のみ。
したがって、おそらく
scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2
(host[:port]
を使用できます。
はパスの一部ではありません-は、user
のホームディレクトリにある./file
を参照します。
ただし、ローカルホストを介したコピーは両方とも遅く、私の経験ではエラーを隠します。たとえば、/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
変数のみが設定されていることに注意してくださいscp://
uriを解析すると、7.6p1より古いバージョン(2017年10月)には存在しません。
コメント
- このオプションがあなたの答えの中で何をしているのか説明していただけますか。
-x -oClearAllForwardings=yes
代わりにrsync
を使用して実行できるかどうかも考えていました。 -
-x
はX11転送を無効にし、-oClear..
はすべてのtcp転送を無効にします(いずれかが~/.ssh/config
または/etc/ssh/ssh_config
を介して強制された場合) - @RakibFiharsyncのコメント:"送信元と宛先の両方をリモートにすることはできません"。 周りにトリックがあるかもしれませんが、それは別の質問になるはずです。
- さて、あなたの詳細な説明の後でそれを理解することができました。 (y)
~/.ssh/config
を意味しました。リモート1とリモートでは、〜/ .ssh / configのデフォルトポートは変更されていないため、デフォルトポート22です。編集できますが、毎回すべてのssh設定を編集するのではなく、1つのライナーを使用してそれを実行したいと思います。ssh
をリモートホストに1つにまとめて、そこから単純なscp
を発行するか、次のように1行で実行します。ssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'
。また、'config
ファイルを一度に編集する必要はありません。ホストのカップルごとに1回だけです(たとえば、remote1
のremote2
に接続しますが、ホストの数によっては、もちろんこれに不快感を覚える場合があります。