没有密钥身份validation的SSH上的无密码Rsync
我想设置一个通过SSH连接的RSync作业。
我有我的电脑(备份@myhost)和远程主机(测试@ remhost),我需要备份文件夹〜/包含所有内容的东西。 ssh用户测试只对〜/文件夹中的所有文件和文件夹具有READ访问权限。 我想使用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或任何其他密钥)。 我只想要一个简单的命令来登录并完成工作。
编辑:可能的情况可能是,如果公钥validation被禁用,你不能改变它。 例如,如果您使用OpenSSH,则需要在服务器上具有root权限才能编辑文件sshd_config
并添加PubkeyAuthentication yes
。
编辑:这是最终为我工作的:
sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/
请注意,此方法不被认为是安全的,因为它以纯文本forms发送密码,并且容易受到中间人攻击。 建议使用密钥身份validation以提高安全性。
也许尝试sshpass 。
似乎很简单,使用……它也可以通过apt获得。
在我复制我的钥匙之前,我一直在找这样的东西,但是因为无论如何我已经把钥匙到处都是,我还没有花时间试试这个。
请注意那里关于密码可见性的教程的免责声明。
对于每个需要这样做的人:
sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/
对于安全威胁更安全的解决方案的变体是将密码存储在具有严格权限的文件中,并使用带有shpass
的-f
标志:
sshpass -f '/home/me/.password' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/
列出正在运行的进程不会在命令行中显示您的密码,现在它只显示密码所在文件的路径。
我无法想象没有密码短语的公钥validation对于自动ssh / rsync登录不是更好的解决方案。
无论如何, expect
应该是实现你想做的事情的一种方式。 你不能将密码传递给ssh,但这是非常相似的。 怎么做, 在stackoverflow回答这里 。
首先是没有passowrd/bypass
密码登录的ssh,因为你可以看到我们可以使用ssh-copy-id -i ./ssh/id_rsa.pub
来定位机器。
在那次测试之后机器可以通过ssh远程无需密码,然后rsync在下一路当然从本地机器到target/server
机器
我发现sshpass有效,但是因为termanal说SSHPASS read: Enter passphrase for key '/home/ubuntu/.ssh/id_rsa':
你需要运行它:
sshpass -P passphrase -p 'password' rsync /path/to hostname:/destination/path -av --progress -e ssh
其中-P
指定要查找的提示我通过运行sshpass -v
找到它,并找出它找不到的短语password
。