Передача переменной в rsync - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть следующий скрипт:

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

Ошибка:

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

Как я могу оценить $ SSHKeyGen перед вызовом rsync?

ОБНОВЛЕНИЕ: Кстати, это на OSX.

Ответы [ 3 ]

1 голос
/ 11 ноября 2011

Есть несколько решений, которые, на мой взгляд, проще:

  • Используйте 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
0 голосов
/ 11 ноября 2011

Попробуйте это:

rsync -e "ssh -i ""$SSHKeyPath"
0 голосов
/ 11 ноября 2011

Вы используете одинарные кавычки, которые не могут заменить имя переменной ее значением. Все будет хорошо с двойными кавычками.

Например

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