sshpass:一个很棒的免交互 SSH 登录工具
本文最后更新于 1751 天前,其中的信息可能已经有所发展或是发生改变。

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/

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇