如果密钥文件是
~/.ssh/id_rsa
,Rsync没问题,但是当其他东西出现时我得到Permission denied (publickey)
。使用ssh我可以用
-i
指定身份文件,但是rsync似乎没有这种选择。 我还尝试过将本地计算机上的密钥临时移至
~/.ssh/id_rsa
,但这同样行不通。您使用rsync指定身份文件?
#1 楼
您可以通过'-e'选项指定确切的ssh命令:rsync -Pav -e "ssh -i $HOME/.ssh/somekey" username@hostname:/from/dir/ /to/dir/
许多ssh用户都不熟悉他们的〜/ .ssh / config文件。您可以通过配置文件为每个主机指定默认设置。
Host hostname
User username
IdentityFile ~/.ssh/somekey
从长远来看,最好学习〜/ .ssh / config文件。
评论
尝试提高ssh传输的详细程度:rsync -e'ssh -vv'web1:/ etc / issue / tmp / issue
–丹·加思韦特(Dan Garthwaite)
2014年10月14日14:49
啊。如果要自动执行此操作,并且将无法提供密码,则需要在两端都配置一个额外的无密码ssh密钥。如果您希望rsync在交互式会话中在没有密码的情况下工作,则需要使用ssh-agent。
–丹·加思韦特(Dan Garthwaite)
14-10-14在21:48
Duuuuuuude! 〜/ .ssh / config文件-您为我打开了一个新的世界!
–demaniak
17年6月29日在20:38
〜/ .ssh / config为我节省了一天,非常感谢。
–smishra
18年6月12日在15:57
对于〜/ .ssh / config来说,我必须执行chmod 600〜/ .ssh / config
– Tono Nam
19-10-21在4:21
#2 楼
可以使用SSH用户配置完成此操作,请参见:http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/
基本上编辑〜/ .ssh / config:
$ nano ~/.ssh/config
#Add Hosts below
Host server1
HostName examplehost.com
User username
Port 22
IdentityFile /path/to/key
$ rsync -e ssh /home/user/directory user@remote.host.net:home/user/directory/
这适用于使用SSH,rsync,
的任何程序
评论
您也可以使用rsync -e ssh / home / user / directory server1:home / user / directory /
–糊精
19年11月1日在13:12
#3 楼
对我来说,按如下所示启动ssh-agent就足够了:eval `ssh-agent -s`
ssh-add /path/to/mykey
另请参见此处的更长的答案https://stackoverflow.com/questions/17846529/could未打开与您的身份验证代理的连接
#4 楼
仅供参考:1)公钥始终位于登录到远程服务器的用户的主目录中,即,如果您以“备份”身份登录,则位于/home/backup/.ssh/authorized_keys 。登录时的用户ID定义了在目标位置使用的公共密钥。
您可以通过两种不同的方式选择连接时的用户ID:
ssh user_id@destination.server
or
ssh -l user_id destination_server (<-- that is lower case "L")
另一方面,私钥是除非您像Dan的答案中所述覆盖它,否则以类似的方式在用户的homedir中。
2)出于备份目的,可能希望创建一个受限制的密钥,该密钥只能运行一个命令,例如“ rsync”。关于“ rsnapshot”备份,有一个很好的描述,它允许您使用非特权用户帐户和“ sudo”远程备份整个服务器:
“ rsnapshot” howto
Rsnapshot可以轻松备份一堆远程或本地服务器,使其成为方便的计划和集中式备份服务器。
评论
对于执行sudo rsync也是有用的,由于某种原因,它不使用自己的ssh密钥。@ijoseph确实,从以root身份运行的cron脚本同步时,我使用rsync -aAP“ sudo -u user ssh” user @ server:dir local_dir