如何通过SSH会话通过网络使用tar命令

时间:2020-01-09 10:40:50  来源:igfitidea点击:

如何在Linux或类Unix系统上运行的安全ssh会话上使用tar命令?
如何通过基于SSH的网络连接提取tar存档?
可以通过ssh会话通过网络使用tar归档实用程序的GNU版本(以及tar的其他旧版本)。
由于连接不安全,请勿使用telnet/nc命令。
您可以使用Unix/Linux管道来创建档案。
让我们看一些示例,这些示例说明如何在ssh上安全地使用tar命令在Linux,BSD/macOS或类似Unix的系统上创建档案。

在ssh上使用tar命令的语法

将ssh放入box并运行tar命令的语法如下:

ssh user@box tar czf - /dir1/ > /destination/file.tar.gz

或者

ssh user@box 'cd /dir1/ && tar -cf - file | gzip -9' >file.tar.gz

以下命令通过ssh会话将/wwwdata目录备份到dumpserver.theitroad.com(IP 192.168.1.201)主机:

# tar zcvf - /wwwdata | ssh [email protected] "cat > /backup/wwwdata.tar.gz"

或者

# tar zcvf - /wwwdata | ssh [email protected] "cat > /backup/wwwdata.tar.gz"

输出示例:

tar: Removing leading `/' from member names
/wwwdata/
/wwwdata/n/theitroad.com/
/wwwdata/c/theitroad.local/
....
..
...
Password:

在此示例中,使用gpg归档/data2 /:

$ tar zcf - /data2/ | gpg -e | ssh Hyman@nas03 'cat - > data2-dd-mm-yyyy.tar.gz.gpg'

请注意,当与sudo或任何其他需要伪终端分配的命令一起使用时,使用ssh命令可能会读取如下错误:

sudo: sorry, you must have a tty to run sudo

为了避免这个问题,将-t选项传递给ssh命令:

# tar zcvf - /wwwdata | ssh -t [email protected] "sudo cat > /backup/wwwdata.tar.gz"

在ssh会话上使用tar命令

从远程计算机(server1.theitroad.local)复制到本地系统的过程如下:

$ cd /path/local/dir/
$ ssh [email protected] 'tar zcf - /some/dir' | tar zxf 

使用tar和ssh的Linux系统硬盘驱动器备份/镜像

让我们将名为/dev/sdvf的整个硬盘驱动器从本地计算机复制到远程AWS EC2云备份服务器:

# dd if=/dev/sdvf | ssh backupimg@vpc-aws-mumbai-backup-001 'dd of=prod-disk-hostname-sdvf-dd-mm-yyyy.img'

要从服务器上的镜像还原本地驱动器,请反转命令:可以从远程AWS EC2云备份服务器上存储的镜像还原本地硬盘驱动器,如下所示:

# ssh backupimg@vpc-aws-mumbai-backup-001 'dd if=prod-disk-hostname-sdvf-dd-mm-yyyy.img' | dd of=/dev/sdvf

将数据移至新的Linux系统

scp和其他命令复制目录结构的问题是符号链接,特殊设备,套接字,命名管道以及其他未复制的内容。
因此,我们在ssh上使用tar。
例如,从nuc-box复制所有数据。
打开x230便携式计算机上的终端,并运行ssh命令和tar命令:

$ ssh Hyman@nuc-box 'tar czf - /home/Hyman' | tar xvzf - -C /home/Hyman

通过SSH会话通过网络对磁带设备使用tar命令

Linux下默认的第一个SCSI磁带驱动器是/dev/st0。
您可以在此处阅读有关Linux下使用的磁带机命名约定的更多信息。
您也可以使用dd命令以达到清晰的目的:

# tar cvzf - /wwwdata | ssh [email protected] "dd of=/backup/wwwdata.tar.gz"

也可以将备份转储到远程磁带设备:

# tar cvzf - /wwwdata | ssh [email protected] "cat > /dev/nst0"

可以使用mt命令来倒带,然后使用cat命令将其转储:

# tar cvzf - /wwwdata | ssh [email protected] $(mt -f /dev/nst0 rewind; cat > /dev/nst0)$

如何通过ssh提取tar

语法非常简单:

$ cat my-data.tar.gz | ssh [email protected] "tar zxvf -"
cat my-data.tar.gz | ssh [email protected] "cd /path/to/dest/; tar zxvf -"

在此示例中,通过ssh会话将tar备份从远程计算机还原到本地目录:

# cd /
# ssh [email protected] "cat /backup/wwwdata.tar.gz" | tar zxvf 

如果您希望在cron作业或脚本中使用以上命令,请考虑使用SSH密钥来解决密码。

如何使用进度条在tar上进行tar

使用pv命令可以查看通过管道的数据进度。
因此语法为:

$ cd /dir/to/backup/
$ tar zcf - . | pv | ssh [email protected] "cat > /backups/box42/backup-dd-mm-yyyy.tgz"
$ cd /tmp/data/
$ tar zcf - . | \
pv | \
ssh Hyman@centos7 "cat > /tmp/data.tgz"<

ssh上的tar的更多示例:

$ tar cvjf - * | ssh Hyman@theitroad "(cd /dest/; tar xjf -)"
$ tar cvzf - mydir/ | ssh Hyman@backupbox "cat > /backups/myfile.tgz"
$ tar cvzf - /var/www/html | ssh [email protected] "dd of=/backups/www.tar.gz"
$ ssh Hyman@box2 "cat /backups/www.tar.gz" | tar xvzf 
$ tar cvjf - * | ssh [email protected] "(cd /dest/; tar xjf - )"

确保您阅读了tar命令/ssh命令/bash命令手册页以获取更多信息:

$ man tar
$ man bash
$ man ssh

关于SSHFS的说明-FUSE文件系统

您可以使用sshfs挂载远程目录并运行tar命令:

mkdir /data/
sshfs [email protected]:/ /data/
tar -zcvf /data/file.tar.gz /home/Hyman/