Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用ssh进行rsync而不使用~/.ssh/config中存储的凭据_Bash_Ssh_Rsync - Fatal编程技术网

Bash 使用ssh进行rsync而不使用~/.ssh/config中存储的凭据

Bash 使用ssh进行rsync而不使用~/.ssh/config中存储的凭据,bash,ssh,rsync,Bash,Ssh,Rsync,我有一个传输文件的脚本。每次我运行它时,它都需要连接到不同的主机。这就是为什么我要添加主机作为参数 脚本的执行方式为:/transfer.sh 我可以正确连接存储在$ssh中的ssh连接,但由于密钥错误,rsync连接尝试失败: Permission denied (publickey). rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error

我有一个传输文件的脚本。每次我运行它时,它都需要连接到不同的主机。这就是为什么我要添加主机作为参数

脚本的执行方式为:
/transfer.sh

我可以正确连接存储在
$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
命令括在引号中,否则在Jakuje向我指出正确的方向后,参数将传递到
rsync
命令,而不是传递到
ssh
我的解决方案:

#!/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

你是对的,$SSH需要被封装。接受这个答案是正确的,因为你给我指出了正确的方向。
#!/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