您如何将身份文件与 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 - 至少在我的语法中。我究竟做错了什么?它是否试图在远程机器上查找身份文件?如果是这样,我如何指定我想在本地机器上使用身份文件?
您可能希望使用 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 命令将防止 ~
或 $HOME
所需的 shell 扩展。您可以在单引号中使用键的完整或相对路径。
使用任一 $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 测试
$HOME
在单引号内不起作用(无变量扩展),因此您必须使用双引号或绝对路径。
"$HOME"
或 $HOME
没有任何区别(如果您想让它变得复杂,也可以使用 "${HOME}"
)
您必须指定身份密钥文件的绝对路径。这可能是 rsync 中的某种怪癖。 (毕竟不可能完美)
几天前我遇到了这个问题:-)
这对我有用
rsync -avz --rsh="ssh -p1234 -i ~/.ssh/1234-identity" \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"
/home/user/.ssh/1234-identity
。然后它起作用了。可能是因为它是一个不同的外壳,正如 Darhuuk 的回答所建议的那样。
将密钥文件与 rsync 一起使用:
rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test
您是在 bash 还是 sh 中执行命令?这可能会有所作为。尝试将 ~
替换为 $HOME
。尝试将 -e
选项的字符串用双引号括起来。
User ubuntu
:) 谢谢!fish
),则执行eval (ssh-agent -c)