如何通过SSH会话通过网络使用tar命令
如何在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/