Shell脚本:使用SSH登陆并更改密码

平时运维中有时会遇到需要更改服务器的管理员密码,如果服务器比较多的时候,我们可以编写一个脚本来实现,省时省力。

linux使用SSH登陆时需 要手动输入yes 来确认连接,所以首先要解决这个问题,让脚本实现远程执行命令无须人工干预。

第一步 使用ssh-keygen创建本机的公钥和私钥

创建成功后会在/root/.ssh下生成私钥和公钥

第二步 使用ssh-copy-id复制公钥到远程主机及expect内部命令编写ssh自动登陆脚本

auto_ssh_copy_id () {

expect -c "set timeout -1;

spawn /usr/bin/ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]$2;

expect {

*(yes/no)* {send -- yes\r;exp_continue;}

*password:* {send -- $1\r;exp_continue;}

eof{exit 0;}

}";

}

调用方法:auto_ssh_copy_id $pass1 $ipnet.$i

假设需要更改密码的服务器IP 在172.18.0.1-172.18.0.100之间,脚本如下。

#!/bin/bash

#Program

#

#relase

#tryrus 20161029

ipnet=172.18.0   #改成实际的IP 段

declare i=1      #改成实际开始的IP

pass1=password1 #ssh远程登陆root的密码

pass2=password2   #要设定的新密码

auto_ssh_copy_id () {

expect -c "set timeout -1;

spawn /usr/bin/ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]$2;

expect {

*(yes/no)* {send -- yes\r;exp_continue;}

*password:* {send -- $1\r;exp_continue;}

eof{exit 0;}

}";

}

auto_ssh_change_psw() {

expect -c "set timeout -1;

spawn ssh [email protected]$2 "passwd";

expect {

*New* {send -- $1\r;exp_continue;}

*Retype* {send -- $1\r;exp_continue;}

eof{exit 0;}

}";

}

while [[ "$i" -le "100" ]]      #控制循环,数值改成实际要使用的IP

do

ping "$ipnet.$i" -c 3 > /dev/null

if [ $? -eq 0 ];then

auto_ssh_copy_id $pass1 $ipnet.$i            #运行一次后,这行就不需要了

auto_ssh_change_psw $pass2 $ipnet.$i

fi

let "i+=1"

done

第二次测试结果

谢谢你打开这篇博文,并一直坚持看到了这里,如果觉得对你有帮助,请不要吝啬点一下右下角的赞。

时间: 2024-10-11 03:20:37

Shell脚本:使用SSH登陆并更改密码的相关文章

shell脚本实现ssh自动登录远程服务器示例

本文转载自 懒惰的肥兔 :http://www.xuanhao360.com/linux-expects/ shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh [email protected] expect "*password:" send "123\r" expect "*#" interact Expect是一个用来处理交互的命令.借助Expect,我们可以将交互过程写在一个脚本上,使

Teamviewer远程ssh命令行更改密码启动

Teamviewer远程ssh命令行更改密码启动 设置密码 $ sudo teamviewer passwd [NewPasswd ] 查看teamviewer信息 $ teamviewer info TeamViewer 13.0.6634 (DEB) TeamViewer ID: 123456789 teamviewerd status ● teamviewerd.service - TeamViewer remote control daemon Loaded: loaded (/etc/

shell脚本配置ssh免密登陆

通过shell脚本配置免密登陆,分为两个脚本,一个是配置文件config.env,一个是正式脚本sshkey.sh. # config.envexport HOST_USER=(root) export PASSWD=(a) export SSH_HOST=(192.168.165.15 192.168.165.16 192.168.165.165) 以上congfig.env文件中,SSH_HOST参数可配置多个IP,可配置不同的用户 sshkey.sh脚本内容大致如下: 在本地用rsa加密方

shell脚本:<批量检查并更改MySQL数据库表的存储引擎><工作中总结>

Work Description: 在搭建完Percona XtraDB Cluster(一种MySQL架构,简称PXC),需要把old mysql中的数据导入到new mysql中,但PXC只支持InnoDB表,非InnoDB表无法同步到PXC的其它节点上,因此我需要批量统一表的引擎. Event Description: 1.需要写个shell脚本,完成两个目的:<1>查询(ck)ENGINE的状态 <2>更改(al)引擎状态 2.需要在管理机上,访问远程MySQL <方

Shell脚本实现SSH免密登录及批量配置管理

本节索引 场景分析 ssh免密登录 pssh工具批量管理 SHELL自动化脚本 本篇总结 场景分析 作为一个运维工程师,不是每个人工作的环境都想阿里.腾讯那样,动不动就上亿的PV量,上万台服务器.我们通常还是工作在,几十台上百台服务器这样的环境,而使用ansible或者puppet这样的自动化运维工具则显得大材小用,并且最终的效果可能还不如几个小工具达到的效果好.像ssh免密登录在配合pssh这样的推送工具,在配合自动化配置脚本,可以说是即方便也使用.这一节将详细带大家以shell脚本的形式实现

Linux Shell 脚本限制ssh最大用户登录数

我撰写本文原来的意图是想把"复制SSH渠道"和"copy SSH Session"这样的功能从远程ssh客户端中剔除掉.因此想到可以在SSH服务端设置一下,但查阅了sshd_config的man手册,发现里面的看起来限制ssh连接数量的参数(MaxSessions ,ClientAliveCountMax等)在复制SSH渠道中并不好用,即一个远程ssh客户端可以通过这种方式几乎无限制的建立ssh会话,未免让人觉得"不爽". 例如,我正在做一件事情

ssh登陆强制使用密码验证登陆

Linux系统使用ssh进行登陆,可以采用密码登陆和秘钥登陆.采用密码登陆每次需要输入密码进行验证,验证通过则可登陆到环境. 秘钥登陆为在服务器的客户端生成相应的公钥和私钥,公钥用于加密,私钥用于解密.然后将公钥发给需要连接的服务端.当客户端需要连接服务端时,服务端利用公钥将用户名和密码加密发送给客户端,客户端利用对应的私钥进行解密,验证通过则可登陆到服务端. 有时根据需要,我们需要强制使用密码验证的方式进行登陆. 采用强制密码登陆方式设置如下: 在客户端的/root/.ssh/目录下的conf

shell脚本:不登陆KVM虚拟机,修改虚拟机网卡IP地址

# Author:丁丁历险(Jacob) # 该脚本使用 guestmount 工具,Centos7.2 中安装 libguestfs-tools-c 可以获得 guestmount 工具 # 脚本在不登陆虚拟机的情况下,修改虚拟机的 IP 地址信息 # 在某些环境下,虚拟机没有 IP 或 IP 地址与真实主机不在一个网段 # 真实主机在没有 virt-mange 图形的情况下,远程连接虚拟机很麻烦 # 该脚本可以解决类似的问题 #!/bin/bash #Author:丁丁历险(Jacob) #

用shell脚本编写ssh直接修改目标服务器的密码以及ssh的应用

1.在生成环境中经常要修改服务器的密码,以保证安全,可以用shell编写脚本. 用ssh直接修改对方服务器的密码可以用ssh 用户名@登录IP 后跟命令就可以实现,但是需要管理员输入密码后才能操作,为了不让管理员手动进行输入所以用expect解决此方案,由于expect是单独的命令在/bin/bash是无法使用的,所以必须要嵌套使用,<<代表以什么结尾,EOF代表以EOF结尾,spawn输入登录的命令行,expect为期待着问什么,send代表发送需要的内容,\r代表为回车符. 1台服务器修改