将变量传递给rsync

时间:2011-11-11 06:21:37

标签: bash rsync

我有以下脚本:

 #!/bin/sh
 ...
 rsync -e 'ssh -i "$SSHKeyPath"'

错误是:

Warning: Identity file $SSHKeyPath not accessible: No such file or directory.

如何在调用rsync之前获得$ SSHKeyGen评估?

更新 fwiw,这是在OSX上。

3 个答案:

答案 0 :(得分:1)

我认为有几种解决方案更容易:

  • 使用ssh-agent(1)解锁ssh(1)进程密钥的私有部分。这是迄今为止最容易使用的机制。
  • 使用~/.ssh/config根据主机名选择不同的私钥:

    host backuphost
        IdentityFile ~/.ssh/different_key
    

然后无需在命令行上指定密钥。

<强>更新

鉴于您正试图将密钥与个人用户分开,这对我来说现在更有意义。如果您在sh中使用其他变量,则可以使原始方法有效:

$ cat foo.sh
#!/bin/sh

SSHKeyPath=/home/sarnold/.ssh/id_rsa
KEYARG="ssh -i $SSHKeyPath"

rsync -e "$KEYARG" /tmp/pointless localhost:/tmp/new_pointless
$ ./foo.sh 
Enter passphrase for key '/home/sarnold/.ssh/id_rsa': 
skipping directory pointless

答案 1 :(得分:0)

您使用的是单引号,它不能用变量名替换变量名。用双打引号就可以了。

例如

$> path_to_file="/tmp/file"; rsync -e "$( ssh -i "$path_to_file" )"
Warning: Identity file /tmp/file not accessible: No such file or directory.

答案 2 :(得分:0)

试试这个:

rsync -e "ssh -i ""$SSHKeyPath"