如何在 rsync 中使用标识文件?

如何在 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 ——至少在我的语法中是这样。我做错了什么?它是否试图在远程计算机上查找身份文件?如果是,如何指定要在 本地计算机上使用标识文件?

110053 次浏览

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

您可能需要使用 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 扩展。可以使用单引号中的键的完整路径或相对路径。

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

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

这对我有用

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

使用 $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进行测试

在 rsync 中使用密钥文件:

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