Есть несколько решений, которые, на мой взгляд, проще:
- Используйте
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