复制一个没有scp的tar.gz文件(使用echo或cat)

时间:2015-10-11 13:13:24

标签: python linux bash tar scp

我们是否可以使用echo命令复制.tar.gz文件的内容?

我使用telnet(通过python中的telnetlib)在服务器中执行命令。我需要将几个文件复制到服务器中。但是,scp只是在身份验证后挂起。服务器是busybox服务器。另一个团队目前正在研究这个问题。我使用的scp命令是:

scp -i /key/private.pem /home/tempuser/file.tar.gz tempuser@remote1:/tmp/

我一边读取文件的内容,一边把它们放在遥控器的echo命令中。但是,当我尝试读取tar.gz文件时,它会失败。我无法解压缩文件并复制其中的文件,因为tar文件中有近500个文件。包括一些tar文件。

那么在没有scp的情况下复制tar文件内容(在python中通过open命令读取)的任何可行方法都可以吗?

或者是否可以在python中使用telnetlib复制文件?使用Telnet功能?

为了更清楚,我需要将tar.gz文件从本地计算机上传到远程计算机。但没有scp的帮助。如果它是一个python解决方案会更有帮助。如果bash是要走的路,我也可以运行os.system。所以我正在寻找python / shell脚本解决方案。

如果您需要更多信息,请在评论中提出。

3 个答案:

答案 0 :(得分:0)

您可以cat并重定向,例如:

ssh user@server cat file.tar.gz > file.tar.gz

请注意,cat将在服务器端发生,但重定向将在本地发生,发生在本地文件中。

你也可以直接gunzip + untar到本地文件系统:

ssh user@server cat file.tar.gz | tar zxv

反过来说,从本地复制到服务器:

ssh user@server 'cat > file.tar.gz' < file.tar.gz

gzip + tar到服务器:

tar zc . | ssh user@server 'cat > file.tar.gz'

答案 1 :(得分:0)

如果你尝试在python脚本之外运行命令,它会要求你输入密码:

scp -i /key/private.pem /home/tempuser/file.tar.gz tempuser @ remote1:/ tmp /

要传递Unix scp / ssh命令的密码,您需要将密码重定向为命令的输入,如:

myPass&gt; scp -i /key/private.pem /home/tempuser/file.tar.gz tempuser @ remote1:/ tmp /

答案 2 :(得分:0)

还有一种使用 base64 实用程序的替代方法。通过对您希望传输的文件进行 base64 编码,您将避免任何可能导致 echo 跳闸的转义字符等问题。例如:

some_var="$( base64 -w 0 path_to_file )"

ssh user@server "echo $some_var | base64 -d > path_to_remote_file"

选项 -w 0 对于防止 base64 插入换行符(默认为 76 个字符后)很重要。