你如何使用rsync的身份文件?

时间:2011-04-03 01:53:54

标签: unix rsa rsync dsa

如何在rsync中使用身份文件?

这是我认为的语法我应该使用rsync来使用身份文件进行连接:

rsync -avz -e 'ssh -p1234  -i ~/.ssh/1234-identity'  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"

但它给了我一个错误:

Warning: Identity file ~/.ssh/1234-identity not accessible: No such file or directory.

文件很好,权限设置正确,它在执行ssh时工作 - 只是不使用rsync - 至少在我的语法中。我究竟做错了什么?它是否试图在远程计算机上查找身份文件?如果是这样,我如何指定我想在我的本地机器上使用身份文件?

6 个答案:

答案 0 :(得分:79)

您可能希望使用ssh-agentssh-add将密钥加载到内存中。 ssh会自动尝试ssh-agent中的身份。命令将是

eval $(ssh-agent) # Create agent and environment variables
ssh-add ~/.ssh/1234-identity

ssh-agent是一个用户守护程序,它在内存中保存未加密的ssh密钥。 ssh根据运行时ssh-agent输出的环境变量找到它。使用eval来评估此输出会创建环境变量。 ssh-add是管理密钥内存的命令。可以使用ssh-add锁定代理。可以在启动ssh-agent时指定密钥的默认生存期,也可以在添加密钥时为其指定。

您可能还需要设置〜/ .ssh / config文件来提供端口和密钥定义。 (有关更多选项,请参阅`man ssh_config。)

host 22.33.44.55
    IdentityFile ~/.ssh/1234-identity
    Port 1234

单引号ssh命令将阻止~$HOME所需的shell扩展。您可以在单引号中使用密钥的完整路径或相对路径。

答案 1 :(得分:70)

使用$HOME

rsync -avz -e "ssh -p1234  -i \"$HOME/.ssh/1234-identity\"" dir remoteUser@server:

或密钥的完整路径:

rsync -avz -e "ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:

在Ubuntu上使用rsync 3.0.9进行测试

答案 2 :(得分:36)

您必须指定身份密钥文件的绝对路径。这可能是rsync中的某种怪癖。 (毕竟它不可能是完美的)

我几天前遇到过这个问题: - )

答案 3 :(得分:21)

这对我有用

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"

答案 4 :(得分:6)

你是用bash还是sh执行命令?这可能会有所不同。尝试将~替换为$HOME。尝试对-e选项的字符串进行双引号。

答案 5 :(得分:4)

使用rsync的密钥文件:

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test