我有以下脚本:
#!/bin/sh
...
rsync -e 'ssh -i "$SSHKeyPath"'
错误是:
Warning: Identity file $SSHKeyPath not accessible: No such file or directory.
如何在调用rsync之前获得$ SSHKeyGen评估?
更新 fwiw,这是在OSX上。
答案 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"