如何在ssh会话中不使用scp的情况下复制文件?


55

我已经使用ssh登录到系统,并且两个系统上都没有scp。如何在不使用scp程序的情况下复制文件。


两个系统上都存在netcat(nc)吗?如果是这样,请使用ssh会话来建立TCP端口的通道,并在该端口上使用nc。

你有rsync
slhck 2011年

3
您也可以执行以下操作:ssh user@remotehost cat /path/to/remote/file > /path/to/local/file
nm

需要@nm报价(对我来说,是Ubuntu服务器)
Ivan Black

@nm对我不起作用-文件已损坏(我想登录消息会破坏它)。
monnef

Answers:


94

发送文件:

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

要么:

ssh ajw@dogmatix "cat > remote" < file

接收文件:

ssh ajw@dogmatix "cat remote" > copy

20
@ggg根本不是真的。cd /tmp; cat /bin/bash > test; chmod a+x test; diff test /bin/bash; ./test一切正常。关于二进制文件,本来就没有什么“魔术”。在我的示例中,两个文件进行了比较,并具有相同的校验和。的确,由于诸如控制序列和不可打印的字符之类的东西,无法从终端窗口进行复制和粘贴,但是使用此类管道绝对不会在终端附近。
Flexo 2012年

@Flexo我需要这样的东西,唯一的例外是,我需要从一个文件夹中管道所有jpg。如何遍历/ storage / sdcard1 / * jpg和>具有相同名称的文件?
乔治·普罗芬扎

2
@GeorgeProfenza,您需要将其添加tar到组合中。tar cvf - /path/*.jpg | ssh foo@bar.com "tar xvf -"或类似的东西应该起作用。
Flexo

上面ggg和Flexo所说的一种含义是,您不能使用“ -t”选项来ssh。
mjg123 2014年

1
真好!您也可以使用pv代替第一只猫,以便获得进度条,例如pv file | ssh ajw@dogmatix "cat > remote"
Theolodus

3

尝试这个:

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

2
根本不需要这么多猫叫声
Flexo

1

您可以使用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
"

啊,我的答案显然太l33t
Aric

-1

除了通过管道将文件传输到远程文件外cat,您还可以使用某些SFTP客户端来传输文件。


+1,但应注意,OP正在尝试避免scp,因为它在系统上不存在。考虑到这种限制,在接收端也可能需要一个FTP服务器,这使得复制过程依赖于软件,而不是默认情况下通常存在的软件。
Paul Sasik

-1

python3 -m http.server与所需文件位于同一目录中-之后,您可以curlwget使用浏览器下载文件。请注意,使用该运行命令,您当前目录中的所有文件将公开可用,直到您按Ctrl+ 为止C

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.