129

您如何将身份文件与 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 - 至少在我的语法中。我究竟做错了什么?它是否试图在远程机器上查找身份文件?如果是这样,我如何指定我想在本地机器上使用身份文件?

4

6 回答 6

88

您可能希望使用ssh-agent并将ssh-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 命令将防止or所需的 shell 扩展$HOME。您可以在单引号中使用键的完整或相对路径。

于 2011-04-03T02:19:11.820 回答
86

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

于 2013-11-30T08:54:17.477 回答
36

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

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

于 2011-04-05T04:02:55.430 回答
25

这对我有用

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"
于 2012-11-21T22:45:17.010 回答
10

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

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test
于 2016-05-11T06:42:14.470 回答
6

您是在 bash 还是 sh 中执行命令?这可能会有所作为。尝试替换~$HOME. 尝试为该-e选项双引号。

于 2011-04-03T01:59:26.450 回答