关于unix:如何在rsync中使用身份文件?

How do you use an identity file with rsync?

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

这是我认为应该与rsync一起使用的语法,以使用标识文件进行连接:

1
2
rsync -avz -e 'ssh -p1234  -i ~/.ssh/1234-identity'  \
"/local/dir/" [email protected]:"/remote/dir/"

但它给了我一个错误:

1
Warning: Identity file ~/.ssh/1234-identity not accessible: No such file or directory.

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


您可能需要使用ssh-agentssh-add将密钥加载到内存中。ssh会自动尝试ssh代理的身份,如果可以找到的话。命令将是

1
2
eval $(ssh-agent) # Create agent and environment variables
ssh-add ~/.ssh/1234-identity

ssh-agent是一个用户守护进程,在内存中保存未加密的ssh密钥。ssh根据运行时ssh代理输出的环境变量找到它。使用eval评估此输出创建环境变量。ssh-add是管理密钥内存的命令。可以使用ssh add锁定代理。可以在启动ssh代理时指定密钥的默认生存期,也可以在添加密钥时指定密钥的默认生存期。

您可能还需要设置~/.ssh/config文件来提供端口和密钥定义。(有关更多选项,请参见'man ssh_config'。

1
2
3
host 22.33.44.55
    IdentityFile ~/.ssh/1234-identity
    Port 1234

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


使用EDOCX1[1]

1
rsync -avz -e"ssh -p1234  -i "$HOME/.ssh/1234-identity"" dir remoteUser@server:

或键的完整路径:

1
rsync -avz -e"ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:

在Ubuntu上使用rsync 3.0.9进行测试


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

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


这对我有用

1
2
rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" [email protected]:"/remote/dir/"


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


对rsync使用密钥文件:

1
rsync -rave"ssh -i /home/test/pkey_new.pem" /var/www/test/ [email protected]:/var/www/test