リモートサーバーのscpのポートを指定するにはどうすればよいですか?

ファイルを相互に送信しようとしているリモートノードが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接続のデフォルトとは異なるポートを使用している場合はサポートされていないと思います。

コメント

  • stackoverflow.com/questions/10341032/ … 役立つかもしれません
  • 質問で述べたように試してみました。うまくいかなかったようです
  • localhostはポート22をリッスンしていますが、sshconfigではremote1からremote2の両方に指定されていますはい、~/.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回だけです(たとえば、 remote1remote2に接続しますが、ホストの数によっては、もちろんこれに不快感を覚える場合があります。
  • はい、それはあなたの質問に答えます。 "いいえ" 答えであり、 の答えです。好きかどうか。

回答

単純なリモートからリモートへの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)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です