簡體   English   中英

使用ssh進行rsync而不使用〜/ .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 \
${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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM