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

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

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

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

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

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

答案1

使用工具密码

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

答案2

不要使用 root 权限,而是创建一个专门用于此工作的帐户。使用没有密码的公钥代替密码。

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

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

答案3

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

看一眼:

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

因此,基本上,ssh-keygen -t dsa在将运行脚本的机器上运行。当它要求您输入密码时,按 ENTER 接受空白。您将获得两个文件。如果您遵循默认建议,则文件将是 ~/.ssh/id_dsa 和 ~/.ssh/id_dsa.pub。第一个是私钥。第二个是公钥。

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

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

对于复制文件,scp 或 rsync 都可以。这取决于您要做什么。rsync 默认使用 ssh,因此将使用您刚刚设置的基于密钥的身份验证。

答案4

控制协议允许您使用 -pw 参数直接将密码传递给它。或者,这是一个更好的主意,使用 ssh 代理并设置基于密钥的登录 - 这更安全。有一个关于设置 ssh 以使用基于密钥的登录的指南登录这里

您可以使用是的命令向程序发送“是”。

相关内容