通过中间服务器进行 GNU 并行和 RSync

通过中间服务器进行 GNU 并行和 RSync

我正在尝试使用 gnu parallel 生成多个 rsync 实例,以便通过中间服务器进行下载。这是我使用的命令 -

cat ~/filelist | parallel --will-cite -j 5 --verbose --progress --line-buffer --keep-order rsync -avrhP -e "ssh -J intermediateUserID@intermediateIP" sourceUserID@sourceIP:{} ~/scratch/quicktest/

但我收到以下错误 -

rsync 错误:语法或使用错误(代码 1)在 main.c(1354) [sender=3.1.3] 本地:0/728/100%/0.0s rsync -avrhP -e ssh -J middleUserID@intermediateIP sourceUserID@sourceIP:/source/directory/path /destination/path/ local:1/728/100%/0.0s 意外的远程参数:sourceUserID@sourceIP:/source/directory/path

似乎 gnu parallel 出于某种原因删除了 -e 后的引号。我怎样才能让它包含引号,并使代理跳转与 GNU parallel 和 rsync 一起工作?

答案1

Bash 正在解析您的命令行,并将其ssh -J intermediateUserID@intermediateIP作为第 11 个参数传递给parallel。反过来,parallel它将不带引号的字符串作为几个参数传递给rsync。您可能想要的是使用内部引号传递该参数。

例如:

cat ~/filelist \
    | parallel --will-cite -j 5 --verbose --progress --line-buffer --keep-order \
        rsync -avrhP \
        -e "'ssh -J intermediateUserID@intermediateIP'" \
        sourceUserID@sourceIP:{} \
        ~/scratch/quicktest/

作为参考,您的命令行是:cat ~/filelist | parallel --will-cite -j 5 --verbose --progress --line-buffer --keep-order rsync -avrhP -e "ssh -J intermediateUserID@intermediateIP" sourceUserID@sourceIP:{} ~/scratch/quicktest/

PS 如果您使用无密码公钥身份验证(并且已经接受和/或绕过已知主机文件),则您的命令应该可以工作。否则,您将遇到并行化进程(即rsync/ ssh)需要输入的挑战,并且使用--ttyparallel还假设-j1 -u。为了克服这一挑战,请考虑使用pssh而不是parallelw。rsync或考虑集成sshpass到您现有的命令行中。

相关内容