我需要定期备份远程服务器上的目录,该服务器是由研究组织托管的虚拟机。他们要求通过 ssh 密钥访问虚拟机,这很好,只是我不知道如何将 rsync 指向该服务器的 ssh 密钥。
如果密钥文件是,Rsync 没有问题~/.ssh/id_rsa
,但是当它是其他文件时,我会得到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 文件。
答案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 [email protected]:home/user/directory/
这应该适用于任何使用 SSH、rsync 的程序,
答案3
对我来说,按如下方式启动 ssh-agent 就足够了:
eval `ssh-agent -s`
ssh-add /path/to/mykey
答案4
供参考:
1)公钥始终位于登录远程服务器的用户的主目录中,即如果您以“备份”身份登录,则公钥位于/home/backup/.ssh/authorized_keys。登录时的用户 ID 定义了目的地使用的公钥。
您可以通过两种不同的方式选择连接时的用户ID:
ssh [email protected]
or
ssh -l user_id destination_server (<-- that is lower case "L")
另一方面,在您的一端,私钥在用户的 homedir 中以类似的方式存在,除非您像 Dan 的答案中所述覆盖它。
2) 出于备份目的,可能需要创建一个受限密钥,该密钥仅限于运行一个命令,如“rsync”。有一个关于“rsnapshot”备份的很好的描述,它允许您使用非特权用户帐户和“sudo”远程备份整个服务器:
Rsnapshot 可以轻松备份一堆远程或本地服务器,使其成为方便的计划和集中备份服务器。