題 如何在ssh會話中不使用scp複製文件?


我已經使用ssh登錄到系統,並且兩個系統上都沒有scp。如何在不使用scp程序的情況下複製文件。


48
2018-06-01 08:57


起源


netcat(nc)是否存在於兩個系統上?如果是,請使用ssh會話隧道連接TCP端口並在該端口上使用nc。
你有沒有 rsync? - slhck
你也可以這樣做: ssh user@remotehost cat /path/to/remote/file > /path/to/local/file - n.m.
@牛米。需要引號(對我來說,ubuntu服務器) - Ivan Black
@牛米。對我不起作用 - 文件已損壞(我猜登錄消息會破壞它)。 - monnef


答案:


要發送文件:

cat file | ssh ajw@dogmatix "cat > remote"

要么:

ssh ajw@dogmatix "cat > remote" < file

要接收文件:

ssh ajw@dogmatix "cat remote" > copy

79
2018-06-01 09:11



使用cat將無法處理二進製文件。 - ggg
@ggg這根本不是真的。 cd /tmp; cat /bin/bash > test; chmod a+x test; diff test /bin/bash; ./test 一切正常。關於二進製文件沒有任何內在的“魔力”。我的示例中的兩個文件都相同,並且具有相同的校驗和。確實,由於控制序列和不可打印的字符之類的東西,從終端窗口復制和粘貼是行不通的,但是使用這樣的管道,這些管道永遠不會靠近終端。 - Flexo
@Flexo我需要這樣的東西,唯一的例外是,我需要從文件夾中輸入所有jpg。怎麼可以遍歷/ storage / sdcard1 / * jpg和 > 到具有相同名稱的文件? - George Profenza
@GeorgeProfenza你需要添加 tar 進入組合。 tar cvf - /path/*.jpg | ssh foo@bar.com "tar xvf -" 或類似的東西應該​​工作。 - Flexo
ggg和Flexo上面說的一個含義是你不能使用“-t”選項來ssh。 - mjg123


試試這個:

cat myfile.txt | ssh me@otherhost 'cat - > myfile.txt' 

1
2018-06-01 09:12



根本不需要那麼多貓叫聲 - Flexo


您可以使用 xxd 和一些醜陋的引用複制多個文件以及在它們上運行命令並執行它們:

ssh -t foo@bar.com "
echo $'"$(cat somefile | xxd -ps)"' | xxd -ps -r > "'somefile'"
chmod +x somefile
echo $'"$(cat someotherfile | xxd -ps)"' | xxd -ps -r > "'someotherfile'"
chmod +x someotherfile
./somefile
./someotherfile
"

1
2017-09-20 21:21



啊,我的回答顯然太l33t了 - Aric


除了將文件傳輸到遠程 cat,您也可以使用某些SFTP客戶端來傳輸文件。


0
2018-06-02 09:42



+1但應該注意OP正在嘗試避免scp,因為它在系統上不存在。鑑於這種限制,FTP服務器也可能需要存在於接收端,這使得複製過程依賴於默認情況下的軟件以外的軟件。 - Paul Sasik