无密钥身份验证的无Pasword Rsync over SSH [不安全]


12

我想设置一个通过SSH连接的RSync作业。

我有我的计算机(backup @ myhost)和远程主机(test @ remhost),我需要备份文件夹〜/包含所有内容的文件。ssh用户测试仅对〜/文件夹中的所有文件和文件夹具有读取权限。我想使用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/

请注意,此方法不安全,因为它以纯文本形式发送密码,并且容易受到中间人攻击。建议使用密钥加密来增强安全性。


3
如果您告诉别人不要告诉您答案,您将不会得到任何答案。
Mike Scott

7
这是没有意义的。密钥认证有什么问题?如果配置了基于密钥的身份验证,那么从那时开始,您只有一个简单的命令可以自动准确地完成您想要的工作。所以我看不出这是什么问题。我可以想象最大的安全漏洞之一就是将密码存储在某个地方以“自动”指定密码,这样做有什么意义呢?
LGB 2012年

我不需要任何人给我讲安全性。我已经知道影响了。我只需要保留服务器上的所有内容,而不更改任何内容。为您提供信息,我已经尝试过使用键,但仍然要求我输入密码,因此您的论点无效!
Sorin-Mihai Oprea,2012年

1
不,出于充分的原因,默认情况下没有此类参数。如果需要这样的参数,请查看Migs的答案。
lumbric

2
@Sorin Mihai Oprea:好吧,如果它对您不起作用,那不好吗?有趣。供您参考:作为ISP的一名互联网系统工程师,我们在100多个服务器上使用基于密钥的ssh身份验证。它对我们有用,很有趣。不要仅仅因为您不了解它的工作方式以及必须如何配置就称其为坏东西。如果您是对的,那么它将不会作为吸引主要ssh服务器实现错误的任何人使用:)因此,我的观点并不是无效的,只是由于某种原因您无法对其进行正确配置。不好意思,不好意思。
LGB 2012年

Answers:


30

也许尝试 sshpass

似乎很容易使用...也可以通过apt来使用。

在复制密钥之前,我一直在寻找类似的东西,但是由于无论如何我都已经有了密钥,所以我没有花时间尝试这一点。

不过,请注意该教程中关于密码可见性的免责声明。


对于需要这样做的每个人:

sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/

不用客气。我在这里与其他人一样,认为公钥身份验证是解决此问题的最佳解决方案,但有时需要替代方法,只要我们知道使用替代方法时的权衡取舍。
米格斯2012年

确实...但是这就是为什么它被称为开源吗?多种口味...相同的结果!
Sorin-Mihai Oprea 2012年

1
谢谢您不仅仅是说密码不好,不要使用密码,我们一些使用OLDDDD的旧设备只是需要这些才能通过,直到新设备到来为止:)
Theodore Howell,

7

解决方案中对安全威胁更为安全的一种变体是将密码存储在具有严格权限的文件中,并使用-f带有shpass以下标志的标志:

sshpass -f '/home/me/.password' rsync --progress -avz -e ssh
test@remhost:~/something/ ~/bak/

区别在于,列出正在运行的进程不会在命令行中显示您的密码,而是现在仅显示密码所在文件的路径。


这个答案比接受的答案要好。
vietnguyen09 '18

1

我无法想象在没有密码短语的情况下进行公钥身份验证不是ssh / rsync自动登录更好的解决方案的情况。

无论如何,expect应该是实现您想要做的事情的一种方法。您不能将密码通过管道传递给ssh,但这非常相似。如何执行此操作,请在stackoverflow处回答。


谢谢您的建议,但实际上我发现sshpass更简单!
Sorin-Mihai Oprea 2012年

1

我发现sshpass可以工作,但是由于终端告诉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不存在的短语找到了它。


0

第一件事是在没有passowrd/bypass密码登录的情况下执行ssh ,如您所见,我们可以将其ssh-copy-id -i ./ssh/id_rsa.pub用于目标计算机。

测试之后,机器可以通过ssh远程登录而无需输入密码,然后从本地机器进入target/server机器,然后进行rsync

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.