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
eval $(ssh-agent)
ssh-add IDENTITY_FILE_TO_ACCESS_B
rsync -a -e "ssh -A A ssh" /tmp/a/ B:/tmp/b/
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_Netcatssh 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-transfersSSH 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 &
引用: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)之間有何區別和聯繫?