scp如何跨過中轉主機直接傳輸文件?

用ssh從本地主機A鏈接到B,然後再ssh鏈接到伺服器C,如果要從C傳輸文件到本地主機A,需要先用scp傳輸到B,然後再scp到A,請問有沒有什麼方法可以直接將文件從C傳輸到A?


本地文件 通過 A機 到 B機

scp -o ProxyCommand="ssh A -W %h:%p" /tmp/a B:/tmp/a # B:/tmp/b 不存在則 /tmp/a -&> B:/tmp/b,不然 /tmp/a -&> B:/tmp/b/a

上面命令假設 A 可以免密碼登錄 B,如果不是需要傳遞 authentication agent

eval $(ssh-agent)
ssh-add IDENTITY_FILE_TO_ACCESS_B
scp -o ProxyCommand="ssh -A A -W %h:%p" /tmp/a B:/tmp/a

可以經過多個 jump server,本地文件 通過 A機、B機 到 C機

scp -o ProxyCommand="ssh -A A ssh -A B -W %h:%p" /tmp/a C:/tmp/a

另外,A機文件 到 B機可以用 scp -3,較新的 openssh 帶

scp -pr3 A:/tmp/a B:/tmp/b

scp 有很多弊病

scp 選項通常帶 -p -r,保留 modification times, access times, and modes,遞歸複製,但依然無法保留 owner, group, acl, extended attributes 等,且時間戳精度為 秒

根據 How the SCP protocol works (Jan Pechanec"s weblog) 時間戳精度最多到 毫秒

路徑末尾斜杠會被去除,不像 rsync 可以指定幾種語義

eval $(ssh-agent)
ssh-add IDENTITY_FILE_TO_ACCESS_B
rsync -a -e "ssh -A A ssh" /tmp/a/ B:/tmp/b/

本地文件 通過 A機、B機 到 C機

eval $(ssh-agent)
ssh-add IDENTITY_FILE_TO_ACCESS_B_AND_C
rsync -a -e "ssh -A A ssh -A B" /tmp/a/ C:/tmp/b/


用ssh作埠轉發即可

ssh -N -L 23333:C_ADDR:22 B_ADDR

scp -P 23333 local_file 127.0.0.1:/remote/path/

均在本地運行,B和C之間配好公鑰驗證


直接加上-3選項加可以

scp -3 user1@server1:file1 user2@server2:file2


另一種做法如下,在A機器的

$HOME/.ssh/config

中指定

Host C
ProxyCommand ssh B netcat -w 120 %h %p

即可。

同時可以把A的公鑰copy到B和C上讓生活更輕鬆。

參見 https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts#ProxyCommand_with_Netcat


ssh user1@remote1 "ssh user2@remote2 "cat file"" &> file


將B設置為bastion伺服器即可。具體請搜索ssh proxy。


scp -o ProxyCommand="ssh $jump_host nc $host 22" $local_path host:$destination_path

serverfault上看到的

http://serverfault.com/questions/37629/how-do-i-do-multihop-scp-transfers


SSH TUNNEL

傳輸路徑:origin:~/asdf.txt --&> hop1 --&> hop2:~/asdf.txt

開放埠:默認 --&>5555 --&> 6666

On hop2:

ssh -R 5555:127.0.0.1:22 &@&

On hop1:

ssh -R 6666:127.0.0.1:5555 &@&

On origin:

scp -P 6666 ~/asdf.txt &@&<127.0.0.1&>:~/asdf.txt

引用:How do I do Multihop SCP transfers?


secure contain protect


直接在b做a的埠轉發 socat 直接轉發tcp流量。或者在b上面搞個代理伺服器。


求問樓上大大們kerberos認證的怎麼破。


推薦閱讀:

怎麼給電腦裝系統?
在使用Multiplexed I/O的情況下,還有必要使用Non Blocking I/O么 ?
超級計算機的組成:一個系統還是多個系統協同合作?
Linux 作為伺服器操作系統的優勢是什麼?
符號連接、軟連接、硬連接、快捷方式、副本(copy)之間有何區別和聯繫?

TAG:操作系統 | Linux | 文件管理 | 數據傳輸 |