sshpass:一个很棒的免交互 SSH 登录工具 – 记忆角落

sshpass:一个很棒的免交互 SSH 登录工具

/ 0评 / 0

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

sshpassssh 一起使用,使用下面的命令可以查看 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/

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注