在两台远程机器之间高效复制大文件

在两台远程机器之间高效复制大文件

我有一个 shell 脚本,它不断在远程系统之间复制大型文件(2 GB 到 5 GB)。基于密钥的身份验证与代理转发一起使用,一切正常。例如:假设 shell 脚本在计算机 A 上运行,并将文件从计算机 B 复制到计算机 C。

“scp -Cp -i 私钥 ssh_user@源IP:源路径 ssh_user@目标IP:目标路径”

现在的问题是 sshd 进程持续占用大量 CPU。
例如:在目标机器(即 machine-C)上使用 top -c 显示

  PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令                                                                         
14580 ssh_user 20 0 99336 3064 772 R 85.8 0.0 0:05.39 sshd:ssh_user@notty                                                            
14581 ssh_user 20 0 55164 1984 1460 S 6.0 0.0 0:00.51 scp -p -d -t /home/binary/instances/instance-1/user-2993/

这会导致高平均负载。

我认为 scp 占用了太多 CPU,因为它正在加密/解密数据。但是我不需要加密数据传输因为机器 B 和机器 C 都在 LAN 中。

我还有什么其他选择?我考虑过“rsync”。但是 rsync 手册页说:

一般的
       Rsync 可以将文件复制到远程主机或从远程主机复制文件,也可以在当前主机本地复制文件(它不支持在两个
       远程主机)。

编辑 1:我已经在使用 ssh 密码 = arcfour128。虽然有一点改进,但​​这并不能解决我的问题。

编辑2:机器上运行着其他二进制文件(我的主要应用程序)并且高平均负载导致它们性能不佳。

答案1

这个问题可以用 来解决rsync。至少这个解决方案在性能上应该是有竞争力的。

首先,rsync可以从其中一个远程系统调用,以克服无法直接在两个远程系统之间复制的限制。

rsync其次,可以通过在守护进程访问模式而不是远程 Shell 访问模式下运行来避免加密/解密。

在守护进程访问模式下,rsync不会通过 ssh 连接传输流量。相反,它会在 TCP 上使用自己的协议。

通常,您可以从 inet.d 或独立运行 rsync 守护进程。无论如何,这需要对其中一个远程系统具有 root 访问权限。假设 root 访问权限不可用,仍然可以启动守护进程。

rsync在目标计算机上以非特权用户身份启动守护进程

ssh -i private_key ssh_user@destination-IP \
       "echo -e 'pid file = /tmp/rsyncd.pid\nport = 1873' > /tmp/rsyncd.conf

ssh -i private_key ssh_user@destination-IP \
       rsync --config=/tmp/rsyncd.conf --daemon

实际复制文件

ssh -i private_key ssh_user@source_ip \
       "rsync [OPTIONS] source-path \
              rsync://ssh_user@destination-IP:1873:destination-path"

答案2

最省力的解决方案是使用 netcat:

destination$ nc -l -p 12345 > /path/destinationfile
source$ cat /path/sourcfile | nc desti.nation.ip.address 12345

(某些 netcat 版本不需要端口的“-p”标志)

所有这些操作都是通过网络将未加密、未经身份验证的数据从一台电脑发送到另一台电脑。当然,这不是最“舒服”的方法。

其他替代方法是尝试更改 ssh 密码(ssh -c),或使用 ftp。

附言:同步在远程机器上运行良好,但它主要与 ssh 结合使用,因此这里没有加速。

答案3

如果不考虑加密,在 上启动 NFS 守护进程C并将目录挂载在 上B。使用 上的 rsync 运行B,但指定本地目录路径。

无论涉及什么用例A,只需将其添加ssh user@B rsync...到命令前面即可。

传输数据时无需加密开销,仅传输不同的文件。

此外,FTP 还以第三方服务器到服务器传输作为协议功能构建。

答案4

尝试一下 unison。这是同步文件的最佳选择。

相关内容