如何将密码传递给在bash脚本中使用的scp命令?

可能重复:
通过SSH连接并自动input密码,而不使用公钥

我有一个bash脚本,使转储数据库,然后将文件从一台服务器复制到另一台,但它总是要求在连接之前input密码。

scp file.tar.gz [email protected]:/backup 

有没有办法将密码直接传递到脚本?

使用工具sshpass

 sshpass -p 'password' scp file.tar.gz [email protected]:/backup 

而不是使用root创build一个帐户只是为了这个工作。 使用没有密码而不是密码的公共密钥。

 scp -i /home/backupuser/.ssh/id_rsa [email protected]:/backup 

通过在目标系统上使用特殊帐户进行备份,您不会公开您的root密码。

最好将ssh设置为使用基于密钥的身份validation,而不是尝试弄清楚如何使用类似于expect将文本发送到login过程。

看一眼:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys

所以,基本上,在运行脚本的机器上运行ssh-keygen -t dsa 。 当它要求您input密码时,请按ENTER键以接受空白。 你会得到两个文件。 如果你遵循默认的build议,文件将是〜/ .ssh / id_dsa和〜/ .ssh / id_dsa.pub。 第一个是私钥。 第二个是公钥。

使用ssh-copy-id user@server2公钥复制到第二台服务器。 这会将公钥添加到server2上的用户的authorized_keys文件中。

您现在应该能够从第一台机器运行ssh并且无需密码login。

为了复制文件,scp或者rsync都可以。 这取决于你在做什么。 rsync默认会使用ssh,所以会使用刚刚设置的基于密钥的authentication。

scp使用SSH隧道到远程服务器并传输文件。 SSH可以使用密码, SSH密钥或两者都authentication用户(推荐)。

要传输没有密码的文件,请为您要使用的用户创build一个SSH密钥 ( build议使用root用户,而是使用非特权用户,并以root用户身份在root服务器上执行特权操作)。

然后,您需要configuration目标系统的SSH守护进程以接受SSH密钥连接(也位于上面的链接中)。

请记住,没有密码的妥协的SSH密钥与被破坏的密码相同 – 任何人都可以进入。对于真正的用户,最好加倍安全性并要求密钥和密码。

出于安全原因,您不应使用无密码的ssh密钥。

工具keychain可以帮助您重新使用ssh-agent并通过脚本在ssh上运行rsync,而无需提示input密码。

要在Ubuntu机器上安装它,只需运行以下命令。

 sudo apt-get install keychain 

查看Keychain的手册页以获得更多关于如何使用它的信息。

pscp允许您直接使用-pw参数将密码传递给它。 或者,这是一个更好的主意,使用SSH代理并设置基于密钥的login – 这是更安全的。 这里有一个如何设置SSH以使用基于密钥的login

您可以使用yes命令向程序发送一个yes。