sshpass安装包_sshpass远程执行命令

sshpass安装包_sshpass远程执行命令(1)定义sshpass的定义:ssh登陆不能在命令行中指定密码,sshpass的出现则解决了这一问题

1. sshpass的定义与安装

(1)定义

sshpass 的定义:ssh 登陆不能在命令行中指定密码,sshpass 的出现则解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。

(2)使用sshpass的原因

博主目前所做的项目,属于面板行业,项目上线后,同一时间需要维护的服务器数量很多,当下就有一百二十多台服务器,后续还有追加,最终数量在448台服务器。

每台服务器对应一个面板生产系统,这多个系统的DB数据来自同一个DB服务器上,当某个生产系统的数据发生变化时,影响的不只是一个服务器,而是一系列多台服务器都要做对应的修改。

这里涉及到修改日志清理配置、数据库基础数据、新增服务功能等,而在一百多甚至四百多台服务器的场景下,由人员手动去操作,是个傻逼的行为。

我们使用sshpass来进行远程批量操作,批量修改、添加日志清理工具的配置内容;在不影响生产的情况下不停机用sshpass去批量修改基础数据,并使用预留的reload功能重载数据;此外还有新增一些比如服务的进程监控的功能进行服务化。

这一系列操作都可以通过sshpass进行远程操作,只需几行或几十行 shell脚本就可以做到。最大限度提高效率和不影响产能。

(3)安装

Ubuntu

apt-get  install sshpass

centos:

# 源码包安装
 wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz 
 tar xvzf sshpass-1.05.tar.gz 
 cd sshpass-1.05.tar.gz 
 ./configure 
 make 
 make install 

# yum安装
yum  -y install sshpass

2. sshpass 的参数

sshpass安装后,可以在控制台输入sshpass命令查看所有选项参数:

$ 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

如上所示,command parameters为你要执行的需要交互式输入密码的命令,如:ssh、scp等。当sshpass没有指定参数时会从stdin获取密码,几个密码输入相关参数如下:

-f filename:从文件中获取密码

-d number:使用数字作为获取密码的文件描述符

-p password:指定明文本密码输入(安全性较差)

-e:从环境变量SSHPASS获取密码

注意:-p 也可用于指定port端口,一般在 username@ip 前使用。

3. 基于sshpass登录远程服务器与验证

sshpass:用于非交互的ssh 密码验证。
参数 p 的使用:使用 -p 参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取

(1)直接远程连接某台主机:

命令:sshpass -p ‘密码’ ssh root@192.168.11.11     【默认为22端口】

sshpass安装包_sshpass远程执行命令

 (2)远程连接指定ssh的端口:

sshpass安装包_sshpass远程执行命令

4. 远程执行命令或脚本( sshpass+ssh)

使用sshpass远程免密,在远程主机上执行shell命令,如下远程执行命令:touch /opt/file.txt

[root@linkhot opt]# sshpass -p 'root' ssh root@192.168.126.135 "cd /opt && touch file.txt"

sshpass安装包_sshpass远程执行命令

如果是执行脚本,则将 touch file.txt 改成 sh file.sh就行了。

5. 远程文件拉取与上传 (sshpass+scp)

文件的拉取与上传使用 scp 参数。

(1)拉取文件

命令:sshpass -p ‘password’ scp username@ip:/远程文件目录/远程服务器文件 /本地文件目录/

[root@linkhot opt]#  sshpass -p 'root' scp root@192.168.126.135:/opt/file.txt /tmp/

(2)上传文件

命令:sshpass -p ‘password’ scp /本地路径/文件名 username@IP:/远程服务器目录

[root@linkhot tmp]# sshpass -p 'root' scp /opt/file.txt root@192.168.126.135:/home

6.从文件读取密码、ip、端口

(1)从密码文件读取文件内容作为密码去远程连接主机

sshpass安装包_sshpass远程执行命令

sshpass安装包_sshpass远程执行命令

7. 连接远程服务器批量操作

使用脚本语言执行sshpass,并从文件读取pass、ip

7.1 当前脚本文件用于连接远程服务器执行命令。

(1)testScript.sh

#!/bin/bash
input=systemIp

while IFS= read -r ip
do 
  arr=(${ip//,/ })

if ping -c1 -W4 ${arr[1]} >/dev/null 2>&1;
then 
    echo "---current system:${arr[0]} ---"
    sshpass -f password ssh -o StrictHostKeyChecking=no -p 22 root@${arr[1]} "cat /tmp/file.txt" < /dev/null
else
    echo "$ip: Ping Fail - `date`"
fi

done < "$input"

(2)systemIp

当前文件用于记录要连接的远程服务器名与ip.

[root@linkhot sshpass]# cat systemIp 
LinkHot,192.168.126.135

(3)执行testScript.sh 脚本查看远程服务器的文件

sshpass安装包_sshpass远程执行命令

7.2 连接远程服务器进行批量上传文件的脚本如下:

#!/bin/bash
input=systemIp

while IFS= read -r ip
do 
  arr=(${ip//,/ })

if ping -c1 -W4 ${arr[1]} >/dev/null 2>&1;
then 
    echo "---current system:${arr[0]} ---"
    sshpass -p 'root' scp -o StrictHostKeyChecking=no -P 22 ./file.txt root@${arr[1]}:/opt/file.txt
else
    echo "$ip: Ping Fail - `date`"
fi

done < "$input"

7.3 连接远程服务器进行批量操作DB的脚本如下:

以下是连接远程服务器的Postgresql进行DB操作的脚本。

#!/bin/bash
input=systemIp

while IFS= read -r ip
do
  arr=(${ip//,/ })

if ping -c1 -W4 ${arr[1]} >/dev/null 2>&1;
then
    echo "---current system:${arr[0]} ---"
    PGPASSWORD=123456 /home/postgres/db/pgsql/bin/psql -h ${arr[1]} -p 5432 -U postgres
 $PGPASSWORD -d "testdb" -c "SELECT * FROM "wechat_user"  WHERE "key" = 'WSP'
else
    echo "$ip: Ping Fail - `date`"
fi

done < "$input"

8. 常见问题

(1)问题现象如下所示:使用sshpass没有反应,以为sshpass装错了,但linux装的应该不会出错

rpm -qa | grep sshpass
sshpass-1.06-2.el7.x86_64

解决措施:

方法一:使用ssh root@192.168.126.135命令先建立链接记录

sshpass安装包_sshpass远程执行命令

 sshpass安装包_sshpass远程执行命令

 方法二:可以添加-o StrictHostKeyChecking=no选项【表示远程连接时不提示是否输入yes/no】

sshpass安装包_sshpass远程执行命令

今天的文章sshpass安装包_sshpass远程执行命令分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/75815.html

(0)
编程小号编程小号

相关推荐

发表回复

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