我想要设置一个通过 SSH 连接的 RSync 作业。
我有我的计算机 (backup@myhost) 和远程主机 (test@remhost),我需要备份文件夹 ~/something 及其所有内容。ssh 用户 test 仅对 ~/ 文件夹中的所有文件和文件夹具有读取权限。我想使用 rsync 将 test@remhost:~/something 文件夹复制到 backup@myhost:~/bak 文件夹。
为此,我在 Ubuntu 11.10(Oneiric)上通过 BASH 使用以下命令:
rsync -avz -e ssh test@remhost:~/something/ ~/bak/
按下回车键后我得到了这个:
test@remhost's password:
我输入密码并且 rsync 工作正常。
我想让上面的命令自动输入密码并作为参数传递或者自动输入并启动作业。
我尝试执行rsync -avz -e ssh test:password@remhost:~/something/ ~/bak/
但它仍然要求输入密码,这很烦人。
我不想听到任何类型的密钥(RSA、DSA 或任何其他密钥)。我只想要一个简单的命令,可以让我登录并完成工作。
编辑:一种可能的情况是,如果公钥身份验证被禁用,并且您无法更改这一点。例如,如果您使用 OpenSSH,则需要服务器上的 root 权限才能编辑文件sshd_config
并添加PubkeyAuthentication yes
。
编辑:这最终对我有用:
sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/
请注意,此方法并不安全,因为它以纯文本形式发送密码,并且容易受到中间人攻击。建议使用密钥认证以获得更强的安全性。
答案1
也许尝试 密码。
看起来很简单,使用起来也很简单...也可以通过 apt 使用。
在我复制我的钥匙之前,我一直在寻找这样的东西,但是因为我已经把钥匙放在了我需要的所有地方,所以我没有花时间去尝试这个。
但请注意该教程中有关密码可见性的免责声明。
对于需要这样做的每个人:
sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/
答案2
对于安全威胁更安全的解决方案的变体是将您的密码存储在具有严格权限的文件中,并使用-f
带有标志的shpass
:
sshpass -f '/home/me/.password' rsync --progress -avz -e ssh
test@remhost:~/something/ ~/bak/
不同之处在于,列出正在运行的进程不会在命令行中显示您的密码,现在它只会显示您的密码所在文件的路径。
答案3
我无法想象在任何情况下,没有密码的公钥认证不是自动 ssh/rsync 登录的更好解决方案。
无论如何,expect
应该有一种方法可以实现您想要做的事情。您不能将密码通过管道传输到 ssh,但这非常类似。如何做到这一点,已回答在 stackoverflow。
答案4
这也有效:
system <<~ "RSYNC";
rsync \\
--rsh="sshpass -p '$password' ssh -p 22" \\
--archive \\
--verbose \\
--progress \\
--partial \\
--human-readable \\
"$directory" \\
"$options{host}:${directory}"
RSYNC
即通过sshpass
而--rsh
不是在前面rsync
此方法以及环境变量的用法SSHPASS
在手册的示例部分中有描述: