sshpass:登录到SSH服务器/使用Shell脚本提供SSH密码

时间:2020-01-09 10:42:49  来源:igfitidea点击:

如何通过ssh登录而不使用没有密码的RSA/DSA公钥?
如何在Shell脚本中使用ssh?
如何使用SSH和Shell脚本登录非交互执行密码身份验证?
您可以使用sshpass命令为基于ssh的登录提供密码。
这是一个非交互式ssh密码验证工具。
从手册页:

sshpass是一种实用程序,旨在使用称为键盘交互式密码身份验证的模式运行ssh,但处于非交互式模式。

ssh使用直接TTY访问来确保密码确实是由交互式键盘用户发出的。

Sshpass在专用的tty中运行ssh,以为它是从交互式用户那里获取密码的。

在sshpass自己的选项之后指定要运行的命令。
通常,它是带有参数的ssh,但也可以是任何其他命令。
但是,ssh使用的密码提示当前已硬编码到sshpass中。

在Debian/Ubuntu Linux上安装sshpass

在RHEL/CentOS Linux下安装sshpass

首先,启用EPEL repo并执行以下yum命令:

$ sudo yum install sshpass

如果您使用的是Fedora Linux,请执行:

$ sudo dnf install sshpass

在Arch Linux下安装sshpass

$ sudo pacman -S sshpass

在OpenSUSE Linux下安装sshpass

$ sudo zypper install sshpass

在FreeBSD Unix下安装sshpass

要安装端口,请执行:

# cd /usr/ports/security/sshpass/ && make install clean

要添加软件包,请运行:

# pkg install sshpass

如何在Linux或者Unix中使用sshpass?

使用密码t @ uyM59bQ登录到名为server.example.com的ssh服务器:

$ sshpass -p 't@uyM59bQ' ssh [email protected]

对于shell脚本,您可能需要禁用主机密钥检查:

$ sshpass -p 't@uyM59bQ' ssh -o StrictHostKeyChecking=no [email protected]

不明智的安全警告:-p选项应被视为所有sshpass选项中最不安全的选项。
我建议您使用sshs公钥身份验证。

使用SSHPASS的bash shell脚本示例

语法为:

SSHPASS='t@uyM59bQ' sshpass -e ssh [email protected]
SSHPASS='t@uyM59bQ' sshpass -e ssh [email protected] date
SSHPASS='t@uyM59bQ' sshpass -e ssh [email protected] w
SSHPASS='t@uyM59bQ' sshpass -e ssh -o StrictHostKeyChecking=no [email protected]

密码作为称为SSHPASS的环境变量传递。

从文件读取密码

另一个选择是使用-f选项从文件读取密码。
语法为:

sshpass -f fileNameHere ssh user@server

创建一个文件,如下所示:

$ echo 'myPassword' > myfile
$ chmod 0400 myfile
$ sshpass -f myfile ssh [email protected]

如何使用rsync备份/var/www/html?

使用密码验证通过SSH运行rsync,并在命令行中传递密码:

$ rsync --rsh="sshpass -p myPassword ssh -l username" server.example.com:/var/www/html/ /backup/

或者

$ SSHPASS='yourPasswordHere' rsync --rsh="sshpass -e ssh -l username" server.example.com:/var/www/html/ /backup/

如何将sshpass与gpg加密文件一起使用?

首先,创建一个文件,如下所示:

$ echo 'mySshPasswordHere' > .sshpassword

现在,使用gpg命令加密文件:

$ gpg -c .sshpassword
$ rm .sshpassword

最后,如下使用它:

$ gpg -d -q .sshpassword.gpg > fifo; sshpass -f fifo ssh [email protected]

如果仅执行sshpass,将看到帮助屏幕.