我需要对远程服务器上的目录进行定期备份,该服务器是研究机构托管的虚拟机。他们要求通过ssh密钥对VM进行访问,这一切都很好,除了我不知道如何将rsync指向该服务器的ssh密钥。

如果密钥文件是~/.ssh/id_rsa,Rsync没问题,但是当其他东西出现时我得到Permission denied (publickey)

使用ssh我可以用-i指定身份文件,但是rsync似乎没有这种选择。

我还尝试过将本地计算机上的密钥临时移至~/.ssh/id_rsa,但这同样行不通。
您使用rsync指定身份文件?

评论

对于执行sudo rsync也是有用的,由于某种原因,它不使用自己的ssh密钥。

@ijoseph确实,从以root身份运行的cron脚本同步时,我使用rsync -aAP“ sudo -u user ssh” user @ server:dir local_dir

#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可以轻松备份一堆远程或本地服务器,使其成为方便的计划和集中式备份服务器。