如何在两个打开的 SSH shell 之间复制文件?

如何在两个打开的 SSH shell 之间复制文件?

如果我通过 SSH 登录到两台服务器,并想将一些文件从一台服务器复制到另一台服务器(例如,将配置从旧服务器复制到新服务器),最简单的方法是什么?

答案1

在server1上:

scp <files> server2:/dest/dir/

或者,如果你已经安装了 rsync:

rsync -azvu basedir/ server2:destdir/

如果没有,则通过 tar 管道传输:

tar cf -  -C srcdir | ssh server2 tar xf - -C dstdir

最后两个复制整个目录树。目录中的前一个或多个文件。

换句话说,只需使用第一个的 shell 工具直接复制到第二个即可。

答案2

如果总体规模不是太大,可以使用这个小技巧。

  1. 在源服务器上执行tar -cz <filestocopy> | base64
  2. 将输出复制到剪贴板
  3. 在目标服务器上,执行base64 -d | tar -xzv
  4. 粘贴、输入、Ctrl-D

这是如何运作的?

  1. 创建文件的压缩 tar 并对其进行 base64 编码,以便可以将其复制粘贴为纯文本。
  2. 设置执行相反操作的命令链;解码 base64 输入并提取 tar。
  3. 粘贴数据将其输入到该链中,然后输入 Ctrl-D 以发送文件结束。

答案3

打开两个 ssh 会话后,最快的复制方式是:

  1. 使用 netcat (nc)

    Sender/Source machine:
    tar -czf - /source/dir | nc -l 2342
    
    Receiver/Destination machine:
    nc -w 10 sourcemachine 2342 | tar -C /target/dir -xz -
    
  2. 使用不太安全的加密方式。默认方式通常是 blowfish,但 arcfour 是一种更快的替代方式。

    scp -c arcfour mogga@flinflon:/home/users/mogga /dev/null
    

我通常使用第二个选项(只是因为我能更频繁地记住它)。

相关内容