Ssh

如何為遠端伺服器的 scp 指定埠?

  • August 16, 2019

我有兩個遠端節點,我試圖將文件從一個節點發送到另一個節點。

scp remote1:~/testSCP remote2@10.0.1.10:~/

我已經~/ssh/config在我的本地機器上設置了,所以它2222預設使用埠。

但是 remote1 的預設 ssh 埠22在 ssh 配置中設置為,而不是 port 2222。因此,要通過 ssh 進行任何外部連接,它22預設使用埠。

我嘗試了以下不起作用:

scp -P 2222 remote1:~/testSCP remote2@10.0.1.10:~/

還嘗試了以下方法,但也沒有用:

scp remote1:~/testSCP -P 2222 remote2@10.0.1.10:~/

對於兩者,我都收到以下錯誤:

ssh: connect to host 10.0.1.10 port 22: Connection refused
lost connection

這是真的,因為10.0.1.10使用的是 port2222而不是 port 22

2222嘗試將文件發送到10.0.1.10(remote2) from時,如何指定 remote1 使用埠remote1

更新

嘗試後

scp -3 remote1:~/testSCP remote2@10.0.1.10:~/

我有奇怪的行為。即使我的密碼正確,它也會給我以下輸出:

remote1@10.0.1.9's password: remote2@10.0.1.10's password: 
Permission denied, please try again.
remote1@10.0.1.9's password: 
Permission denied, please try again.
remote1@10.0.1.9's password:

我還沒有啟用無密鑰身份驗證。

新更新

在以多種方式嘗試之後,我能夠在我的腳本中通過 ssh 從我的 localhost 登錄到 remote1,然後從 remote1 到 remote2 的 scp 來做到這一點。但是,這並不能回答我的問題。我打算直接從我的本地電腦執行此操作,然後在兩個實例之間傳輸文件,如果兩個實例的 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]不是路徑的一部分——scp://user@host/file./fileuser的主目錄中引用)。

但是通過本地主機複製既慢又慢,根據我的經驗,它會隱藏錯誤。例如,這不會列印任何錯誤消息,儘管無法創建任何/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 月)的版本中根本不存在。

引用自:https://unix.stackexchange.com/questions/535852