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

chu*_*byk 54 password bash scp

可能重复:
通过 SSH 连接并自动输入密码,无需使用公钥

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

scp file.tar.gz root@xxx.xxx.xxx.194:/backup
Run Code Online (Sandbox Code Playgroud)

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

小智 83

使用工具sshpass

sshpass -p 'password' scp file.tar.gz root@xxx.xxx.xxx.194:/backup 
Run Code Online (Sandbox Code Playgroud)

  • 这不是 OpenSSH 的标准部分,实际上我的机器(Mac OS X 10.7、Ubuntu 12.04、FreeBSD 8、Debian 3.1)都没有它。这也是关于这个问题被标记为...的重复的问题所提供的公认答案。 (13认同)
  • 优秀!安全性并不总是一个问题,例如在防火墙内进行跨平台开发时。在带有 apt-get 的系统上,使用 `sudo apt-get install -y sshpass` 安装 (6认同)
  • 好的,为了增加额外的安全性,请考虑`sshpass -f file_with_password`。然后保护密码文件的权限,使其工作,然后阅读一些关于使用 sshpass 是多么糟糕的“聪明”建议,而authorized_keys 是伟大的。特别是,当其他人只给你登录+通行证(例如 SFTP),并且没有选项来授权你的公钥时...... (6认同)
  • 我建议使用 `read -s -p "Enter ssh password : " PASSWORD_SSH;` 从提示符处读取一次密码,然后在 sshpass 短语 `sshpass -p $PASSWORD_SSH scp file.tar.gz root@xxx.xxx 中使用它。 xxx.194:/备份` (3认同)

use*_*517 44

而不是使用 root 为这项工作创建一个帐户。使用没有密码短语的公钥代替密码。

scp -i /home/backupuser/.ssh/id_rsa backupuser@xxx.xxx.xxx.194:/backup
Run Code Online (Sandbox Code Playgroud)

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

  • -1 表示不回答问题。 (14认同)
  • +1 用于引用创建用于文件上传的特定帐户而不是使用 root。而且我还将建议为该用户使用像 [rssh](http://www.pizzashack.org/rssh/) 这样的受限 shell。 (3认同)

And*_*ndy 3

scp用于SSH通过隧道连接到远程服务器并传输文件。SSH可以使用密码、SSH密钥或两者来验证用户身份(推荐)。

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

然后,您需要配置目标系统的SSH守护进程以接受SSH关键连接(也在上面的链接中)。

请记住,SSH没有密码的泄露密钥与泄露密码相同 - 任何人都可以进入。对于真正的用户,最好加倍安全性并需要密钥和密码。