当前位置: 首页 > news >正文

远程连接服务器工具:sshpass

有些时候,服务器需要登录其它服务器执行远程命令,比如说为了安全考虑,公司的activemq服务器是没有外网权限的,但是如果activemq出了故障需要告警,这个时候就需要让activemq的服务器连接到一台有外网权限的服务器上去执行告警的脚本。


遇到这种情况,方法之一就是SSH互信,虽然前期生成指纹麻烦一点,这样以后每次的连接就不用输入密码了,而且这个方法是最安全的!或者使用expect和sshpass这种小工具来达到我们的目的。这里我没有使用expect,因为它里面文件的格式太奇葩了,所以我使用的是sshpass。


sshpass的安装很简单:#yum install -y sshpass

wKioL1m_exjwtHaNAAAyIp92DTg525.png


假设现在有两个服务器,一个A(无外网权限),一个是B(有外网权限),同时这两个机器内网可以互通,现在如果A要连接到B去执行命令,那么在A上执行的命令格式如下:

1
sshpass -p  B服务器的密码  ssh  -o  "StrictHostKeyChecking no"  -p 端口号 角色名@B服务器的内网IP地址  '具体的shell命令'
1
sshpass -p  B服务器的密码  ssh  -o  "StrictHostKeyChecking no"  -p 端口号 角色名@B服务器的内网IP地址  '具体的shell命令1 && 具体的shell命令2'

但是这样会在命令行里暴露服务器的密码,所以这个方法很不推荐!


那么现在可以把B服务器的密码写进一个文件里,然后调用这个文件,那么A上执行的命令格式如下:

1
sshpass -f 密码文件名  ssh  -o  "StrictHostKeyChecking no"  角色名@B服务器的内网IP地址  '具体的shll命令'

然后再把这个密码文件名访问权限进行设置,注意,sshpass认定密码是这个文件第一行内容!


如果现在是A想在B执行A上的某个脚本,那么在A上执行命令格式如下:

1
sshpass -f 密码文件名  ssh  -o  "StrictHostKeyChecking no"  用户名@B服务器的内网IP地址  bash  -s < A服务器上的脚本


比如,我在这台叫ttsmq的服务器里写了一个脚本叫test.sh,内容如下:

wKioL1m_fnOzvFJvAAAwSrQf3yU541.png

wKioL1m_gFHggDsfAAApjKCQl_s398.png


然后在这台10.168.74.85机器上查看,效果如下:

wKioL1m_gKLBehWPAACZJXoFlVk457.png


实际工作中的一个小的案例:定期修改服务器(百台左右)密码之后,验证是否修改成功

1
2
3
4
#cat server_list.cfg
web1
web2
web3


#cat check_passwd.sh

1
2
3
4
5
6
7
8
#!/bin/bash
ips=$( cat  server_list.cfg)
for  ip  in  $ips
do
         echo  ==========$ip===========
         sshpass -p  "server_password"  ssh  root@$ip  ":" 
         [ $? - eq  0 ] &&  echo  -e   "\033[32m ==$ip==password is ok... \033[0m"  ||  echo  -e  "\033[31m ==$ip==Password is error!!! \033[0m"
done


或者也可以将密码存放在一个文件中,然后使用-f 参数来获取密码。


不过sshpass虽然很简单,但是有些地方也是比较受限制的,就像很多高级服务器使用的linux是更改过的,用LDAP账号登陆,那个登陆界面是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
####  LDAP账号登陆时候ssh输出
ssh   -p 22 user@内网IP地址 
Keyboard-interactive:
PAM authentication
Password: 
Keyboard-interactive:
PAM authentication
LDAP Password: 
  
#### 普通的ssh命令输出
ssh  user@localhost
user@localhost's password:

遇到这样的格式,sshpass就无效的。


最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!

wKioL1l16m3BMYDKAACPHEqd55Q687.jpg

 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1966403



相关文章:

  • U盘安装Debian 6 amd64版本
  • Zabbix调优的几个原则
  • HytrixCommand实践总结
  • 探索iptables BPF模块的悲惨历程
  • cp命令使用和注意
  • LVM中的PV、VG、LV、PE、LE的关系及简单LVM配置
  • Oracle错误:ORA-39125,ORA-31642,DBMS_CDC_EXPDP.SCHEMA_CALLOUT一例
  • 动态破解静态加密软件--simeon
  • byteofpython学习笔记(1)
  • 利用openfiler建立仲裁磁盘
  • re模块 正则匹配
  • HTTP缓存工作流程详解
  • NeHe OpenGL教程 第二十七课:影子
  • Spread for Windows Forms快速入门(2)---设置Spread表单
  • 局域网Internet的共享
  • [PHP内核探索]PHP中的哈希表
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【347天】每日项目总结系列085(2018.01.18)
  • 08.Android之View事件问题
  • ES6 学习笔记(一)let,const和解构赋值
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • httpie使用详解
  • HTTP请求重发
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java超时控制的实现
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Mysql5.6主从复制
  • node学习系列之简单文件上传
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • windows下mongoDB的环境配置
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 不上全站https的网站你们就等着被恶心死吧
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 对象引论
  • 技术胖1-4季视频复习— (看视频笔记)
  • 如何使用 JavaScript 解析 URL
  • 探索 JS 中的模块化
  • 通过npm或yarn自动生成vue组件
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #define 用法
  • #include到底该写在哪
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)nginx 安装、启停
  • (7)STL算法之交换赋值
  • (C++)八皇后问题
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)ssm码农论坛 毕业设计 231126
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (四)模仿学习-完成后台管理页面查询
  • (一)SpringBoot3---尚硅谷总结
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)