2017-06-03 1 views
1

私はファイルを転送するスクリプトを持っています。私はそれを実行するたびに、別のホストに接続する必要があります。そのため、私はホストをパラメータとして追加しています。スクリプトは次のように実行され〜/ .ssh/configに保存されている資格情報を使用せずに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 [email protected]$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接続の正しい構文ですか?

答えて

1

rsync行の前にset -xと書いて、引数がどのように展開されるかを見てください。私はそれが間違っていると信じています。

sshコマンド(ホスト名なし)を引用符で囲む必要があります。そうでないと、引数はsshではなくrsyncコマンドに渡されます。

+0

あなたは正しかったが、$ SSHをカプセル化する必要があります。あなたが正しい方向に私を指摘して以来、この答えを正しいものとして受け入れる。 – mles

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 
関連する問題