我们是否可以使用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脚本解决方案。
如果您需要更多信息,请在评论中提出。
答案 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 个字符后)很重要。