sshpass的安装与使用

这篇具有很好参考价值的文章主要介绍了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,# Shell脚本,linux,sshpass,scp,ssh,脚本

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

sshpass,# Shell脚本,linux,sshpass,scp,ssh,脚本

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,# Shell脚本,linux,sshpass,scp,ssh,脚本

如果是执行脚本,则将 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,# Shell脚本,linux,sshpass,scp,ssh,脚本

sshpass,# Shell脚本,linux,sshpass,scp,ssh,脚本

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,# Shell脚本,linux,sshpass,scp,ssh,脚本

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,# Shell脚本,linux,sshpass,scp,ssh,脚本

 sshpass,# Shell脚本,linux,sshpass,scp,ssh,脚本

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

sshpass,# Shell脚本,linux,sshpass,scp,ssh,脚本文章来源地址https://www.toymoban.com/news/detail-795970.html

到了这里,关于sshpass的安装与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux - SSH服务 - SCP - 免密通道建立

    目录 SSH是什么? 如何知道一个服务是否运行?  1、看进程 2、看端口 sshd表示什么呢? 我们将修改ssh服务端口号为2244端口,并禁用root用户登录 1、修改端口号为2244 2、禁止root用户登录 3、完成后我们重启sshd服务 4、扩展添加欢迎横幅文件 5、测试是否通过2244端口才能连接

    2024年02月03日
    浏览(39)
  • sshpass的安装与使用

    (1)定义 sshpass 的定义:ssh 登陆不能在命令行中指定密码,sshpass 的出现则解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。 (2)使用sshpass的原因 博主目前所做的项目,属于面板行业,项目上线

    2024年01月17日
    浏览(34)
  • 【Linux】shell 脚本基础使用

    在终端中输入命令可以完成一些常用的操作,但是我们都是一条一条输入命令,比较麻烦,为了解决这个问题,就会涉及到 shell 脚本,它可以将很多条命令放到一个文件里面,然后直接运行这个文件即可。 shell 脚本类似 Windows 的批处理文件 shell 脚本就是将连续执行的命令写

    2024年04月23日
    浏览(48)
  • shell_73.Linux使用新 shell 启动脚本

    每次启动新 shell,bash shell 都会运行.bashrc 文件。①对此进行验证,可以使用这种方法:在 主目录下的.bashrc 文件中加入一条简单的 echo 语句,然后启动一个新 shell。 .bashrc 文件通常也借由某个 bash 启动文件来运行,因为.bashrc 文件会运行两次:一次是当 用户登录 bash shell 时,

    2024年02月05日
    浏览(58)
  • Linux:shell脚本:基础使用(2)

    格式1:test  条件表达式 格式2:[  条件表达式  ]  (前后至少应有一个空格) 常用的测试操作符 -d:测试是否为目录(Directory) -e:测试目录或文件是否存在(Exist) -f:测试是否为文件(File) -r:测试当前用户是否有权限读取(Read) -w:测试当前用户是否有权限写入(Writ

    2024年02月13日
    浏览(54)
  • 【Linux脚本篇】shell变量的使用

    目录 🍁shell变量替换 🍁定义变量 🍁shell变量运算 🍂整数运算 🍂小数运算    🦐博客主页:大虾好吃吗的博客    🦐专栏地址:Linux从入门到精通 ${变量#匹配规则}                                         #从头开始匹配,最短删除 ${变量##匹配规则

    2024年02月06日
    浏览(49)
  • Linux使用shell脚本判断cpu架构

    sh文件示例如下: #!/bin/sh SCRIPTDIR=\\\"$( cd \\\"$( dirname \\\"$0\\\"  )\\\" pwd  )\\\" dlldir=$SCRIPTDIR cd `dirname $0` get_arch=`arch` dotnetName=\\\"dotnet\\\" if [[ $get_arch =~ \\\"x86_64\\\" ]];then     echo \\\"this is x86_64\\\"     if [ ! -f dotnet ];then         tar xvf aspnetcore-runtime-3.1.30-linux-x64.tar.gz     fi     dotnetName=\\\"./dotnet\\\" elif [[

    2023年04月26日
    浏览(62)
  • Linux 环境使用定时任务执行shell脚本

    前言:Linux添加定时任务需要依赖crond服务,如果没有该服务,需要先安装:yum -y install crontabs 1、crond服务相关命令介绍         启动crond服务: service crond start         停止crond服务: service crond stop         重启crond服务: service crond restart         重载crond服务

    2024年02月16日
    浏览(64)
  • 一个简单的ssh安全shell脚本

    自动化禁止恶意IP访问 应用场景:防止恶意IP尝试ssh登录。 脚本说明:将密码输入错误超过4次的IP地址通过iptables防火墙阻止访问。 首先,需要知道ssh远程访问记录在哪个文件中/var/log/secure 其次,模拟远程访问输错密码,查看日志文件,Dec 26 11:34:53 agent1 sshd[3060]: Failed passw

    2024年02月08日
    浏览(57)
  • Linux 服务器间SSH免密码登录与拷贝文件(SCP)

    工作中频繁登录服务器和拷贝文件,都会提示输入密码 在持续集成的场景下,自动部署应用时是没有人工干预的 下面以实现A服务器到B服务器的免密码登录和拷贝文件为例,介绍相关的配置。(即A访问B不需要输密码) A服务器(主服务器)地址:192.168.1.AAA B服务器(从服务

    2024年04月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包