[英]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 \
${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連接的正確語法是什么?
在rsync
行之前編寫set -x
,並觀察參數如何擴展。 我相信這是錯誤的。
您需要將帶參數(無主機名)的ssh
命令用引號引起來,否則參數將傳遞給rsync
命令而不是ssh
。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.