上周领导让我短时间修改200多台服务器的密码,我一脸蒙蔽,手动通宵改??不存在的,经过大佬指点,也总结了一些特别好的方法,让我免受了加班之苦。好了,下面让我们一起聊聊服务器之间远程交互的一些有趣的遭遇和处理方式,把好的方法分享给大家。

目录

一、遭遇和机遇

二、技术分享

1.什么是sshpass

2.安装 sshpass

3.sshpass用法(不用做免密):


一、遭遇和机遇

就在上周,周五临近下班,经理突然找我说说:“阿杰,下午领导开会提到了咱们公司安全性的问题,我们发现很多服务器的管理员(root)密码都设的太简单了,都是六个1啥的(其实,密码都是这位经理自己设的),你给统一改一改,服务器列表你找大黄【注释↓↓】要一下,密码就改成那种既复杂、又好记、含义能代表公司、而且高大上一些的就行,改完你就下班吧。

eg:大黄,人名,真名黄鲲鹏,平时管他叫鹏哥,一个憨厚老实的运维工作者,和我有些交情,中午经常蹭他饭卡;鹏哥曾多次因感情问题跳楼未遂,被我拦下,说起来我还算是他的救命恩人。

我吐了!明天不行?

于是我来找鹏哥要服务器的IP列表,寻思花个把小时手动改了呗,等鹏哥发给我一个8KB的txt文件时,我就感觉没那么简单!果然,服务器加各种虚拟机、测试机大概200多台。这TM是不打算让我下班咯??我突然想到了一系列可能的遭遇。

于是我开始忙活起来,半小时过去了。。。才改好不到十分之一。

正好鹏哥准备撤了,看到我一脸黑,过来问我说:“阿杰我看你印堂发黑啊,也遇到感情危机啦?别想不开啊!”

我去。。。我哪有,经理要我远程改200多台服务器root用户的密码。我这得改到明天啊鹏哥,有没有好办法啊?

说着,鹏哥嘴角扬起十余年资深运维大佬的微笑。“没这么麻烦,看我给你写条shell命令解放你。”然后给我啪啪啪敲出一条命令。

来自胖哥博客的大神

命令如下:

# 作用:把192.168.101.91服务器原密码:111111改成Softsec@2020CN
sshpass -p "111111" ssh -o StrictHostKeyChecking=no root@192.168.101.91 "echo 'Softsec@2020CN' |passwd --stdin root"

乍一眼让我看不到有啥特别的,待他执行后,竟然直接生效了。

我挺惊讶的问道:“这就可以了么?这为啥没有提示输密码啥的?”

鹏哥解释道:“是这样,一般ssh远程命令就得输入密码,修改密码时还要输入两次密码,但上面的命令分别属于强制执行了这两部分。”

  • 第一部分:sshpass -p "111111" ssh -o StrictHostKeyChecking=no root@192.168.101.91

是通过sshpass这个插件远程连接了服务器192.168.101.91的root用户,sshpass的原理跟expect插件类似,就是模拟了人工输入密码。

但sshpass有个问题,当终端首次连接某个服务器时,都会有个“Are you sure you want to continue connecting (yes/no)?  ”的提示,这样就没法连接,但是加上“-o StrictHostKeyChecking=no”参数,即可解决这个问题。

  • 第二部分:echo 'Softsec@2020CN' |passwd --stdin root

@这个命令意思是:修改root用户密码,且输入新密码默认填写前面的内容“Softsec@2020CN”。

“这样一来就可以一条命令成功修改任何服务器密码啦,一次性使用的话就弄简单些,直接复制200条这命令,然后批量修改命令中参数放到shell脚本中运行就阔以了。” 鹏哥说完一乐,拍拍屁股准备走人了~

“哎呀我太菜了,多谢鹏哥啊!”他也摆摆手示意不客气,来了句“咱们菜鸡互助”哈哈。

我赶紧复制了200来条命令,用正则批量替换了各IP和密码,一执行,一分钟不到,搞定!!

一看时间还不到8点,为了庆祝挽回的这一次加班,我赶紧测试了一遍,并把使用的一些细节和技术点总结记录下来分享给大家。

二、技术分享

1.什么是sshpass

sshpass是一个很棒的免交互SSH登录工具,ssh与sshpass的区别

  • ssh登录需要与用户进行交互,需要用户输入密码,做了免密除外。
  • sshpass 允许使用-p参数指定明文密码(相对不安全,用户密码可以通过history查到,或导致被泄露)

在大多数情况下,Linux 系统管理员使用 SSH 登录到程 Linux 服务器时,要么是通过密码,要么是无密码 SSH 登录或基于密钥的 SSH 身份验证。

如果你想自动在 SSH 登录提示符中提供密码和用户名怎么办(想跟命令写到一起)?这时 sshpass 就可以帮到你了。

sshpass 是一个简单、轻量级的命令行工具,通过它我们能够向命令提示符本身提供密码(非交互式密码验证),这样就可以通过 cron 调度器执行自动化的 shell 脚本进行对远程服务器的各种操作。

ssh 直接使用 TTY 访问,以确保密码是用户键盘输入的。 sshpass 在专门的 tty 中运行 ssh,以误导 ssh 相信它是从用户接收到的密码。

重要:使用 sshpass 是最不安全的,因为所有系统上的用户在命令行中通过简单的 “history”、“ps” 等命令就可看到密码。因此,如果必要,比如说在生产环境,我强烈建议使用SSH 免密,老套路吃得香。

当然,也可以使用-f参数从指定文件中读取密码

echo 'password' >mypasswd.txtsshpass -f mypasswd.txt ssh user@ip

使用-e参数从环境变量中获取ssh密码

export SSHPASS= "password"sshpass -e ssh user@ip

2.安装 sshpass

A.在基于 RedHat/CentOS 的系统中,首先需要启用 EPEL 仓库并使用 yum 命令安装它。

yum install sshpass 

B.在 Debian/Ubuntu 和它的衍生版中,你可以使用 apt-get 命令来安装。

sudo apt-get install sshpass 

C.另外,你也可以从最新的源码安装 sshpass,首先下载源码并从 tar 文件中解压出内容:

1、下载:目前1.0.6是最新版本,下载地址:

wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz

2、编译安装

tar -xvf sshpass.tar.gzcd sshpass-1.06./configuremake && make install# 查看安装成功与否:sshpass -V

安装可能出现的问题:

No Package sshpass available

解决方式:

sudo yum install epel-release

安装完之后,再次尝试安装sshpass,问题搞定。

3.sshpass用法(不用做免密):

情景1:远程操作服务器,删除远程服务器/tmp/test下所有文件,注意:这里的""冒号记得加上,如果不加,则会在本地执行该命令而不是远程的服务器

sshpass -p {密码} ssh -o StrictHostKeyChecking=no {用户名}@{主机IP} "rm -rf /tmp/test"
#例:sshpass -p password ssh -o StrictHostKeyChecking=no root@192.168.1.15 "rm -rf /tmp/test"

情景2:将/home/test.txt文件发送到远程服务器的/home/local/目录下

sshpass -p {密码} scp -o StrictHostKeyChecking=no /home/test.txt {用户名}@{主机IP}:/home/local/
#例:sshpass -p {密码} scp -o StrictHostKeyChecking=no /home/test.txt root@192.168.1.15:/home/local/

这条命令帮我在一分钟内修改了200台远程服务器密码!相关推荐

  1. 如何在20分钟内批量部署20台ESXi服务器?

    如何在20分钟内批量部署20台ESXi服务器? https://mp.weixin.qq.com/s?__biz=MjM5NTk0MTM1Mw==&mid=2650642256&idx ...

  2. Win10系统提示过期,三条命令帮你搞定

    很感谢华枚和贺信小盆友,自己的电脑用着用着提示到期了. 解决只需三条命令,前提我的电脑是Win10企业版的哦 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX slmg ...

  3. oracle导入亿条数据耗时,如何在十分钟内插入1亿条记录到Oracle数据库?

    这里提供一种方法,使用 APPEND 提示,使得十分钟内插入上亿数据成为可能. -- Create table create table TMP_TEST_CHAS_LEE ( f01 VARCHAR ...

  4. 停车30分钟内不收费,程序员远程操控挪车,实现自动免费停车...

    还记得前几天关于野生钢铁侠如何创造 自动驾驶自行车 的故事吗? 掌握核心科技的程序员们,又开始开脑洞啦!最近又有一个北京的开发者开了 这个脑洞的背景: 北京道路停车的自动收费,停车不足30分钟不计费 ...

  5. 在30分钟内创建你的深度学习服务器

    每当我开始一个新的项目时,我发现自己一次又一次地创建一个深度学习机器. 从安装Anaconda开始,然后为Pytorch和Tensorflow创建不同的环境,这样它们就不会相互干扰,而在这中间,你不可 ...

  6. 利用shell找出15分钟内修改的文件

    如果你的文件只是生成不会修改的话,可以这样: find * -mmin -15 2>/dev/null 如果可能修改,则需要这样(先创建一个 15 分之前的时间戳的文件,然后找比这个文件新的文件 ...

  7. 极速60秒!用10条命令检查Linux服务器性能

    如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?Netflix性能工程团队的Brendan Gregg写下了这篇博文,来看他们是怎样通过十条命 ...

  8. 用十条命令在一分钟内检查Linux服务器性能

    这种干活必须要和大家分享的啊. 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在 ...

  9. 如何在一分钟内解决Windows系统崩溃问题

    投资万千种,关键在于实践和自身努力,几种证书挂靠挣钱方法,提供给大家,资料和考试科目.可以参见:http://hi.baidu.com/new/gaofeiservice http://gaofeis ...

  10. linux显示最近十条命令,10条命令,一分钟分析Linux性能问题

    当你登录到一台存在性能问题的Linux服务器上时,在头一分钟,你会检查什么? 我们看看Netflix的性能工程师是怎么做的. Netflix大量使用EC2 Linux服务器,很多时候是用一些较为高层的 ...

最新文章

  1. php 网站内容采集器 Snoopy
  2. 在linux中加用户,Ubuntu使用教程——在Ubuntu中添加用户
  3. pycharm新建文件夹时新建python package和新建directory有什么区别?
  4. 趣学车签约神策数据,数据赋能学车“新体验”
  5. postfix本机测试本机时,telnet连接出错
  6. redis位图法统计活跃用户+统计3天的连续登录用户案例
  7. 活学巧用电脑上网实例入门
  8. 7.3.8.1 - 并发多线程 死锁和递归锁 - 信号量
  9. vue3安装_Vue 3.0正式发布了!
  10. Rtmp协议看一篇就够了
  11. 1. HikariCP连接池优化配置小结
  12. 安装VMware15.5+安装win10虚拟机操作系统
  13. 听NBA现场讲解很爽,但啥都听不懂?快来学学术语!
  14. Scrum板与Kanban如何抉择?bnartvjxv板与按照weypxh
  15. Django读取图片
  16. 谷歌AI平均每天发表2篇论文!Jeff Dean执笔年度汇总:16大方向
  17. 手机APP神器大全,这些被堪称神器的APP你用过哪些!
  18. 基于SDN网络的优化技术和QoS研究分析(二)
  19. Redis存储购物车
  20. NR TM测试模式解析

热门文章

  1. ORA-12162错误解决
  2. 扇贝python多少钱_扇贝多少钱一斤?扇贝多少钱一斤2017?
  3. 数据库迁移的几种方式
  4. B2B行业使用什么CRM好? B2B行业的专属CRM—协同级CRM
  5. 天猫精灵开发技能【2】
  6. IDEA教育版申请流程
  7. 移动前端开发的一些简单分类!
  8. STM32F103ZET6硬件资源简介
  9. 关于oracle端口映射的远程连接
  10. 高通9008固件下载备份工具