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


125

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

这是我的语法我应该用rsync的使用使用一个身份文件连接:

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

但这给了我一个错误:

警告:身份文件〜/ .ssh / 1234-identity无法访问:无此类文件或目录。

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

Answers:


86

您可能要使用ssh-agent并将ssh-add密钥加载到内存中。 ssh如果可以找到ssh-agent的身份,它将自动尝试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命令将防止shell扩展,这对于~or来说是必需的$HOME。您可以在单引号中使用键的完整或相对路径。


2
双引号和使用$ HOME解决了我的问题。您能否详细说明前两个命令的作用?我已经熟悉设置配置文件-唯一的问题是当我在一台服务器上有多个帐户时。我不希望它会让我为同一主机指定多个身份文件。
cwd

+1这解决了drone.io的问题:)非常感谢。
Bhargav Nanekalva 2014年

这真是太棒了。FTR,您还可以指定默认的用户名进行连接,例如,User ubuntu在配置EC2 Ubuntu实例时:)谢谢!
DanielSmedegaardBuus

如果您使用的是csh样式的外壳程序(例如fish),请执行eval (ssh-agent -c)
Dave

77

使用任一 $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测试


3
是的,这可以正常工作,无需使用ssh-agent或其他配置选项。
劳伦特

2
+1:这是一个棘手的问题,就像您做不到“ ls'〜'”一样
Alex

$HOME不能在单引号内使用(无变量扩展),因此必须使用双引号或绝对路径。
酒精

在标准Bash中应该可以工作"$HOME"$HOME没有任何区别(也"${HOME}"可以,如果您想使其变得复杂)
Tombart 2014年

我已将单引号更改为双引号。
史蒂夫·贝内特

36

您必须指定身份密钥文件的绝对路径。这可能是rsync中的一种快速问题。(毕竟不可能完美)

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


您可以使用〜,但不能将其嵌入单引号中,因为这样就不能正确地将其替换为/ home / username /,因此必须使用双引号来使它正确工作,请参见@ilcavero的解决方案
X田

24

这对我有用

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

2
由于某种原因,我必须指定身份文件的完整路径,即/home/user/.ssh/1234-identity。然后它起作用了。如Darhuuk的答案所建议的那样,可能是因为它是另一个壳。
osa

@osa,你在那救了我!我在Drupal和rSYNC上遇到问题,而问题是路径...很奇怪。
Lee Woodman

6

您是在bash还是sh中执行命令?这可能会有所作为。尝试替换~$HOME。尝试将-e选项的字符串用双引号引起来。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.