你如何使用rsync身份文件?

你如何使用rsync身份文件?

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

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

但它给了我一个错误:

警告:身份文件〜/ .ssh / 1234身份不可访问:没有这样的文件或目录。

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

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

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

ssh-agent是一个在内存中保存未encryption的ssh密钥的用户守护进程。 ssh根据运行时ssh-agent输出的环境variablesfind它。 使用eval来评估这个输出创build环境variables。 ssh-add是pipe理密钥存储器的命令。 代理可以使用ssh-add来locking。 当ssh-agent启动时,可以指定一个密钥的默认生命周期,或者在添encryption钥时为其指定。

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

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

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

使用$HOME

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

或密钥的完整path:

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

在Ubuntu上使用rsync 3.0.9进行testing

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

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

这对我有用

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

你是用bash还是sh执行命令? 这可能会有所作为。 尝试用$HOMEreplace~ 。 尝试双引号string的-e选项。

使用rsync的密钥文件:

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