如果我通过 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
如果总体规模不是太大,可以使用这个小技巧。
- 在源服务器上执行
tar -cz <filestocopy> | base64
- 将输出复制到剪贴板
- 在目标服务器上,执行
base64 -d | tar -xzv
- 粘贴、输入、Ctrl-D
这是如何运作的?
- 创建文件的压缩 tar 并对其进行 base64 编码,以便可以将其复制粘贴为纯文本。
- 设置执行相反操作的命令链;解码 base64 输入并提取 tar。
- 粘贴数据将其输入到该链中,然后输入 Ctrl-D 以发送文件结束。
答案3
打开两个 ssh 会话后,最快的复制方式是:
使用 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 -
使用不太安全的加密方式。默认方式通常是 blowfish,但 arcfour 是一种更快的替代方式。
scp -c arcfour mogga@flinflon:/home/users/mogga /dev/null
我通常使用第二个选项(只是因为我能更频繁地记住它)。