使用ssh进行rsync而不使用存储在〜/ .ssh / config

时间:2017-06-03 16:43:11

标签: bash ssh rsync

我有一个传输文件的脚本。每次我运行它需要连接到不同的主机。这就是我将主机添加为参数的原因。

脚本执行为:./transfer.sh <hostname>

#!/bin/bash -evx

SSH="ssh \
-o UseRoaming=no \
-o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no \
-i ~/.ssh/privateKey.pem \
-l ec2-user \
${1}"

files=(
  file1
  file2
)

files="${files[@]}"

# this works
$SSH

# this does not work
rsync -avzh --stats --progress $files -e $SSH:/home/ec2-user/

# also this does not work
rsync -avzh --stats --progress $files -e $SSH ec2-user@$1:/home/ec2-user/

我可以正确连接$SSH中存储的ssh连接,但由于密钥错误导致rsync连接尝试失败:

Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.2]

rsync连接的正确语法是什么?

2 个答案:

答案 0 :(得分:2)

set -x行之前写rsync并观察参数的展开方式。我相信这是错误的。

您需要将带有参数(不带主机名)的ssh命令括在引号中,否则参数将传递给rsync命令而不传递给ssh

答案 1 :(得分:0)

我的解决方案在Jakuje指出我正确的方向之后:

#!/bin/bash -evx

host=$1

SSH="ssh \
-o UseRoaming=no \
-o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no \
-i ~/.ssh/privateKey.pem \
-l ec2-user"

files=(
  file1
  file2
)

files="${files[@]}"

# transfer all in one rsync connection
rsync -avzh --stats --progress $files -e "$SSH" $host:/home/ec2-user/

# launch setup script
$SSH $host ./setup.sh