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

cwd*_*cwd 117 unix rsync rsa 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 - 至少在我的语法中.我究竟做错了什么?它是否试图在远程计算机上查找身份文件?如果是这样,我如何指定我想在本地计算机上使用身份文件?

Bil*_*hor 81

您可能希望使用ssh-agentssh-add将密钥加载到内存中. ssh如果可以找到它们,将自动尝试ssh-agent中的身份.命令就是

eval $(ssh-agent) # Create agent and environment variables
ssh-add ~/.ssh/1234-identity
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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

Tom*_*art 72

使用其中之一 $HOME

rsync -avz -e "ssh -p1234  -i \"$HOME/.ssh/1234-identity\"" dir remoteUser@server:
Run Code Online (Sandbox Code Playgroud)

或密钥的完整路径:

rsync -avz -e "ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:
Run Code Online (Sandbox Code Playgroud)

在Ubuntu上使用rsync 3.0.9进行测试

  • 是的,这工作正常,不需要使用ssh-agent或其他配置选项. (3认同)
  • +1:这是一个全球性问题,就像你不能做"ls'〜'" (2认同)

小智 36

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

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

  • 要清楚 - 你不能用〜回家. (7认同)

ilc*_*ero 22

这适合我

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,我必须指定身份文件的完整路径,即`/ home/user/.ssh/1234-identity`.然后它奏效了.可能是因为它是一个不同的外壳,正如Darhuuk的答案中所建议的那样. (2认同)

Avi*_*aut 8

将密钥文件与 rsync 一起使用:

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test
Run Code Online (Sandbox Code Playgroud)


Dar*_*uuk 6

你是用bash还是sh执行命令?这可能会有所不同.尝试更换~$HOME.尝试双引用该-e选项的字符串.