如何通过SSH连接到另一台服务器后在shell脚本中下载文件?

我的目标:

有一个cronjob的shell脚本(MacOSX Snow Leopard),通过ssh(公钥/私钥login)连接到Debian机器,执行一个tar命令,然后下载tar文件。

我的问题:

login工作,也执行一些命令。 但是我怎样才能把文件下载回本地机器呢?

这是我迄今为止:

这是目前为止的shell脚本的内容:

 #!/bin/bash ssh user@remotehost << 'ENDSSH' tar -C / -czf /home/user/stuff.tar.gz /home/user/stuff ENDSSH 

简而言之,不需要heredoc。

 ssh -Te none user@remotehost "tar -C / -cz /home/user/stuff" >stuff.tar.gz 

把它回流。

 #!/bin/bash ssh user@remotehost << 'ENDSSH' > stuff.tar.gz tar -C / -czf - /home/user/stuff ENDSSH 

这可能是你想要的。

scp stuff.tar.gz user@remotehost:/"directory to place this file"/

只需创建一个rsync文件即可:

 #!/bin/bash ssh user@remotehost tar -C / -czf /home/user/stuff.tar.gz /home/user/stuff rsync -chavP --stats user@remotehost:/home/user/stuff.tar.gz . 

不会启动到remotehost的第二个连接,但是当文件自上次归档以来没有更改(很多)时,将会保存您在网络上复制数据。

为什么要下载tar文件而不是在stdout上创建tar内容?

即:

 ssh user@machine '(' cd /the/dir '&&' tar cf - list of files ')' >archive.tar 

I.如何通过SSH压缩文件或文件夹

对于不同的压缩格式,您需要使用不同的命令行:

  1. 压缩

将文件或文件夹压缩到一个zip文件:

 zip -r file.zip file 
  1. BZ2

要将文件(仅)压缩到bz2文件:

 Bzip2 -zk file 
  1. GZ

要将文件(仅)压缩到gz文件:

 gzip -c file > file.gz 

顺便说一下,您需要将上面的“文件”更改为您要压缩的扩展名(如果有)的文件名,而您可以用任何关键字替换以下“xxx”:

  1. 柏油

将一个文件或文件夹压缩到tar文件:

 tar -cvf xxx.tar file 

将多个文件和/或文件夹压缩到tar文件:

 tar -cvf xxx.tar file1 file2 folder1 folder2 ... 
  1. TAR.BZ2

要将一个文件或文件夹压缩到tar.bz2文件,请执行以下操作:

 tar -cvjf xxx.tar.bz2 file 

要将多个文件和/或文件夹压缩到tar.bz2文件,请执行以下操作:

 tar -cvjf xxx.tar.bz2 file1 file2 folder1 folder2 ... 
  1. .tar.gz的

要将一个文件或文件夹压缩到tar.gz文件:

 tar -cvzf xxx.tar.gz file 

要将多个文件和/或文件夹压缩到tar.gz文件,请执行以下操作:

 tar -cvzf xxx.tar.gz file1 file2 folder1 folder2 ... 

II。 如何通过SSH提取文件

提取文件会更容易,因为您不需要担心文件夹:

  1. 压缩

提取一个zip文件:

 unzip file.zip 
  1. BZ2

提取一个bz2文件:

 bunzip2 file.bz2 
  1. GZ

提取一个gz文件:

 gzip -d file.gz 
  1. 柏油

提取一个tar文件:

 tar -xvf file.tar 
  1. TAR.BZ2

提取一个tar.bz2文件:

 tar -xvjf file.tar.bz2 
  1. .tar.gz的

提取一个tar.gz文件:

 tar -xvzf file.tar.gz 

顺便说一句,你需要用真实的文件名替换压缩文件的上述“文件”。

奖金:

除了远程服务器之外,上述命令行也适用于具有终端应用程序的Mac OS计算机。