rsync 与 ssh 不使用存储在 ~/.ssh/config 中的凭据
rsync with ssh without using credentials stored in ~/.ssh/config
我有一个传输文件的脚本。每次我 运行 它需要连接到不同的主机。这就是我将主机添加为参数的原因。
脚本执行为:./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 \
"
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@:/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 连接的正确语法是什么?
在 rsync
行之前写 set -x
并观察参数是如何展开的。我相信一定会错的。
您需要将带有参数(不带主机名)的 ssh
命令括在引号中,否则参数将传递给 rsync
命令而不是 ssh
。
Jakuje 指出正确方向后我的解决方案:
#!/bin/bash -evx
host=
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
我有一个传输文件的脚本。每次我 运行 它需要连接到不同的主机。这就是我将主机添加为参数的原因。
脚本执行为:./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 \
"
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@:/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 连接的正确语法是什么?
在 rsync
行之前写 set -x
并观察参数是如何展开的。我相信一定会错的。
您需要将带有参数(不带主机名)的 ssh
命令括在引号中,否则参数将传递给 rsync
命令而不是 ssh
。
Jakuje 指出正确方向后我的解决方案:
#!/bin/bash -evx
host=
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