如何為遠端伺服器的 scp 指定埠?
我有兩個遠端節點,我試圖將文件從一個節點發送到另一個節點。
scp remote1:~/testSCP remote2@10.0.1.10:~/
我已經
~/ssh/config
在我的本地機器上設置了,所以它2222
預設使用埠。但是 remote1 的預設 ssh 埠
22
在 ssh 配置中設置為,而不是 port2222
。因此,要通過 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
而不是 port22
。
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
將./file
在user
的主目錄中引用)。但是通過本地主機複製既慢又慢,根據我的經驗,它會隱藏錯誤。例如,這不會列印任何錯誤消息,儘管無法創建任何
/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 月)的版本中根本不存在。