sshpass:一个很棒的免交互 SSH 登录工具
在大多数情况下,Linux 系统管理员使用 SSH 登录到程 Linux 服务器时,要么是通过密码,要么是无密码 SSH 登录或基于密钥的 SSH 身份验证。
sshpass 是一个简单、轻量级的命令行工具,通过它我们能够向命令提示符本身提供密码(非交互式密码验证),这样就可以通过 cron 调度器执行自动化的 shell 脚本进行备份。
使用 sshpass 是最不安全的,因为所有系统上的用户在命令行中通过简单的 “ps” 命令就可看到密码。因此,如果必要,比如说在生产环境,我强烈建议使用 SSH 无密码身份验证。
在 Linux 中安装 sshpass
在RedHat/CentOS 的系统中,首先需要启用 EPEL 仓库并使用 yum 命令安装,或者直接下载rpm包按照
yum install sshpass
在 Debian/Ubuntu 和它的衍生版中,你可以使用 apt-get 命令来安装。
sudo apt-get install sshpass
最后也可以从最新的源码安装 sshpass,首先下载源码并从 tar 文件中解压出内容:
$ wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
$ tar -xvf sshpass.tar.gz
$ cd sshpass-1.06
$ ./configure
# sudo make install
如何在 Linux 中使用 sshpass
sshpass 与 ssh 一起使用,使用下面的命令可以查看 sshpass
的使用选项的完整描述:
sshpass -h
下面为显示的 sshpass 帮助内容:
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
-f filename Take password to use from file
-d number Use number as file descriptor for getting password
-p password Provide password as argument (security unwise)
-e Password is passed as env-var "SSHPASS"
With no parameters - password will be taken from stdin
-P prompt Which string should sshpass search for to detect a password prompt
-v Be verbose about what you're doing
-h Show help (this screen)
-V Print version information
At most one of -f, -d, -p or -e should be used
举一些例子:
使用用户名和密码登录到远程 Linux ssh 服务器(10.198.30.30),并检查文件系统磁盘使用情况:
sshpass -p "my_pass" ssh weihu@10.198.30.30 "df -h"
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rootvg-lv_root 50G 20G 28G 42% /
devtmpfs 189G 0 189G 0% /dev
tmpfs 189G 4.0K 189G 1% /dev/shm
tmpfs 189G 4.1G 185G 3% /run
tmpfs 189G 0 189G 0% /sys/fs/cgroup
/dev/sda1 976M 118M 792M 13% /boot
/dev/sda2 500M 16K 500M 1% /boot/efi
/dev/sdc 17T 6.7T 9.8T 41% /data2
/dev/mapper/rootvg-lv_data 50G 53M 47G 1% /data
/dev/sdb 17T 6.3T 11T 39% /data1
/dev/mapper/rootvg-lv_var 20G 1.4G 18G 8% /var
/dev/mapper/rootvg-lv_tmp 9.8G 51M 9.2G 1% /tmp
/dev/mapper/rootvg-lv_home 20G 5.6G 14G 30% /home
/dev/sdd 17T 6.6T 9.9T 40% /data3
tmpfs 38G 0 38G 0% /run/user/0
cm_processes 189G 545M 188G 1% /opt/cm-5.16.1/run/cloudera-scm-agent/process
使用用户名和密码登录到远程 Linux ssh 服务器(10.198.30.30),并创建目录:
sshpass -p "my_pass" ssh weihu@10.198.30.30 mkdir -p /data3/output/${day}
此处,在命令行中提供了密码,这是不安全的,不建议使用此选项。
但是,为了防止在屏幕上显示密码,可以使用 -e
标志,并将密码作为 SSHPASS
环境变量的值输入,如下所示:
[weihu@host12 ~]$ export SSHPASS='my_pass'
[weihu@host12 ~]$ echo $SSHPASS
my_pass
[weihu@host12 ~]$ sshpass -e ssh weihu@10.198.30.30 'df -h'
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rootvg-lv_root 50G 20G 28G 42% /
devtmpfs 189G 0 189G 0% /dev
tmpfs 189G 28K 189G 1% /dev/shm
tmpfs 189G 4.1G 185G 3% /run
tmpfs 189G 0 189G 0% /sys/fs/cgroup
/dev/sda1 976M 118M 792M 13% /boot
/dev/sda2 500M 16K 500M 1% /boot/efi
/dev/sdc 17T 6.7T 9.8T 41% /data2
/dev/mapper/rootvg-lv_data 50G 53M 47G 1% /data
/dev/sdb 17T 6.3T 11T 39% /data1
/dev/mapper/rootvg-lv_var 20G 1.4G 18G 8% /var
/dev/mapper/rootvg-lv_tmp 9.8G 51M 9.2G 1% /tmp
/dev/mapper/rootvg-lv_home 20G 5.6G 14G 30% /home
/dev/sdd 17T 6.6T 9.9T 40% /data3
tmpfs 38G 0 38G 0% /run/user/0
cm_processes 189G 545M 188G 1% /opt/cm-5.16.1/run/cloudera-scm-agent/process
[weihu@host12 ~]$
SSHPASS
环境变量仅用于临时目的,并将在重新启动后删除。
要永久设置 SSHPASS
环境变量,打开 /etc/profile
文件,并在文件开头输入 export
语句:
export SSHPASS='my_pass'
保存文件并退出,接着运行下面的命令使更改生效:
source /etc/profile
参考:https://www.tecmint.com/sshpass-non-interactive-ssh-login-shell-script-ssh-password/