将本地文件复制到远程主机

cat localfile | ssh user@host "cat - >> ~/remotefile"

命令解析:

  • cat localfile:将本地文件 localfile 的内容输出到标准输出

  • |:将标准输出作为输入传递给下一个命令

  • ssh user@host:连接到远程主机 host,使用 user 作为用户名

  • "cat - >> ~/remotefile":在远程主机上执行的命令,将标准输入内容追加到 ~/remotefile 文件中

将远程主机上的文件复制到本地

ssh user@host "cat ~/remotefile" | cat - > localfile

命令解析:

  • ssh user@host "cat ~/remotefile":连接到远程主机 host,使用 user 作为用户名,执行 cat ~/remotefile 命令,将 ~/remotefile 文件的内容输出到标准输出

  • |:将标准输出作为输入传递给下一个命令

  • cat -:将标准输入内容输出到标准输出

  • >:将标准输出重定向到本地文件 localfile

在两台远程主机之间复制文件

ssh user1@host1 "cat ~/remotefile" | ssh user2@host2 "cat - >> ~/remotefile"

命令解析:

  • ssh user1@host1 "cat ~/remotefile":连接到远程主机 host1,使用 user1 作为用户名,执行 cat ~/remotefile 命令,将 ~/remotefile 文件的内容输出到标准输出

  • |:将标准输出作为输入传递给下一个命令

  • ssh user2@host2 "cat - >> ~/remotefile":连接到远程主机 host2,使用 user2 作为用户名,执行 cat - >> ~/remotefile 命令,将标准输入内容追加到 ~/remotefile 文件中

扩展用法

备份本地磁盘到远程主机

dd if=/dev/sda1 | tar -czvf - | ssh user@host "cat - >> /backup/system.back"

命令解析:

  • dd if=/dev/sda1:从 /dev/sda1 设备读取数据

  • |:将标准输出作为输入传递给下一个命令

  • tar -czvf -:将标准输入压缩为 tar 归档文件,压缩级别为 9,输出到标准输出

  • |:将标准输出作为输入传递给下一个命令

  • ssh user@host "cat - >> /backup/system.back":连接到远程主机 host,使用 user 作为用户名,执行 cat - >> /backup/system.back 命令,将标准输入内容追加到 /backup/system.back 文件中

从远程主机恢复本地磁盘

ssh user@host "cat /backup/system.back | tar -xzvf -" | dd of=/dev/sda1

命令解析:

  • ssh user@host "cat /backup/system.back | tar -xzvf -":连接到远程主机 host,使用 user 作为用户名,执行 cat /backup/system.back | tar -xzvf - 命令,将 /backup/system.back 文件的内容解压到标准输出

  • |:将标准输出作为输入传递给下一个命令

  • dd of=/dev/sda1:将标准输入写入 /dev/sda1 设备