现场服务器较多,密码3个月过期,在到期时需更改密码。

  使用expect编写,尝试登陆2次后退出(防止密码错误时账号锁定),超时重试一次。

  shell脚本调用并定时执行,登陆成功后执行一条命令,如:hostname、uname等,根据退出状态判断密码是否到期。

  0--正常

  1--传入参数错误

  2--timeout

  3--密码错误或到期

  脚本如下: 

#!/usr/bin/expect

###############################################################
# 连接远程主机
proc do_login {passwd} {
set timeout
set done
set timeout_case
set ps1 {PS1="doraemon#";export PS1}
while {$done<} {
expect {
*assword* {
send $passwd\r
incr done
}
\[$%>#] {
set done
send $ps1\r\r
break
}
timeout {
set done
switch -- $timeout_case {
{ send_user "try again ...\n" }
{ exit
expect eof
}
}
incr timeout_case
}
}
}
if {$done==} {
exit
expect eof
}
}
###############################################################
# 执行命令
proc exec_cmd {cmd} {
expect -re "doraemon#$"
send_user "\$cmd: $cmd\n"
send $cmd\r
}
###############################################################
# 退出
proc logout {} {
expect -re "doraemon#$"
send exit\r
expect eof
}
###############################################################
if {$argc < } {
send_user "Usage:$argv0 user pass ip command\n"
exit
}
set user [lindex $argv ]
set pass [lindex $argv ]
set ip [lindex $argv ]
set num spawn ssh -o StrictHostKeyChecking=no -l $user $ip
do_login $pass
while {$num<$argc} {
set proc [lindex $argv $num]
# 捕获输出用
set cmd "echo ==$ip==$user==`$proc`=="
exec_cmd $cmd
incr num
}
logout

  测试输出:

[root@centos1 shcript]# ./logon.expect
Usage:./logon.expect user pass ip command
[root@centos1 shcript]# ./logon.expect root root123 127.0.0.1 hostname
spawn ssh -o StrictHostKeyChecking=no -l root 127.0.0.1
root@127.0.0.1's password:
Last login: Fri Aug :: from 127.0.0.1
[root@centos1 ~]# PS1="doraemon#";export PS1
doraemon#
doraemon#$cmd: echo ==127.0.0.1==root==`hostname`==
echo ==127.0.0.1==root==`hostname`==
==127.0.0.1==root==centos1==
doraemon#exit
logout
Connection to 127.0.0.1 closed.
[root@centos1 shcript]# echo $?

Shell登陆远程服务器的更多相关文章

  1. ssh免密码登陆远程服务器

    ssh免密码登陆远程服务器 在使用windows下的cygwin或者在linux下使用Terminal进行远程服务器登陆测试的时候总是会要求输入账号密码,对于此我们可以使用ssh将公钥放在服务器上的方 ...

  2. 通过expect免自动输入密码登陆远程服务器

    通过expect免自动输入密码登陆远程服务器 1.前提必须已经安装expect 2.新建login.sh,文件内容如下 #!/usr/bin/expect -f spawn ssh root@140. ...

  3. Linux 系统免密码登陆远程服务器

    在当前Linux生成公钥私钥ssh-keygen公钥私钥存放路径为:~/root/.ssh/id_rsa id_rsa.pub 登陆被远程主机,进入目录~/root/.ssh/是否存在authoriz ...

  4. [ SHELL编程 ] 远程服务器传输文件

    在shell编程中经常需要获取远程服务器文件.手工操作中使用scp命令完成.为避免脚本执行scp输入密码进行交互,需先建立本机服务器当前用户和远程服务器指定用户的信任关系.具体代码见操作实例,重点关注 ...

  5. linux expect自动登陆远程服务器 批量管理服务器

    #!/usr/bin/expect set ipaddress [lindex $argv 0] set passwd [lindex $argv 1] set timeout 3 spawn ssh ...

  6. 登陆远程服务器的Tomcat 8的manger的页面403

    访问远程服务器Tomcat 8的管理页面报错 在远程服务器上安装了一个tomcat8.5,配置好用户后重新启动tomcat ,发现:8080可以访问,但是进入:8080/manager/html页面报 ...

  7. linux ssh免密登陆远程服务器

    10.170.1.18服务器免密登录到10.170.1.16服务器 首先登入一台linux服务器(10.170.1.18),此台做为母机(即登入其他linux系统用这台做为入口):执行一行命令生成ke ...

  8. xmanger图形化登陆远程服务器

    由于网上的资料比较杂,经过本人整理实际操作验证,保证ok  本人的服务器系统为centos5.8 下面的都是centos服务器上的操作,需要简单的配置下: win客户端使用xmanger软件:首先是服 ...

  9. 【转】使用shell登录远程服务器执行多条命令,ssh登录之后执行脚本文件

    原文:https://blog.csdn.net/qq_36622490/article/details/100773589 这个需求主要是我在jenkins中pipeline的代码里,需要使用she ...

随机推荐

  1. oracle批量操作

    https://stackoverflow.com/questions/39576/best-way-to-do-multi-row-insert-in-oracle 1 批量insert 方式一: ...

  2. instanceof 和isInstance

    Java中的instanceof关键字 instanceof是Java的一个二元操作符,和==,>,<是同一类东东.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边 ...

  3. Linux ping:unknown host问题排查

    一.检查网卡配置:输入ifconfig可以查看当前网卡配置的IP地址并且查看配置文件中网络的设置: [root@bqh- ~]# ifconfig eth0 Link encap:Ethernet H ...

  4. IDRAC 固件升级操:

    Internal Use - Confidential IDRAC 固件升级操作: R630:https://downloads.dell.com/FOLDER05590166M/1/iDRAC-wi ...

  5. CentOS7安装Redis单实例

    由于环境差异,安装过程可能遇到各种各样的问题,不要慌,根据错误提示解决即可. 1.下载redis下载地址在:redis.io比如把Redis安装到/usr/local/soft/ cd /usr/lo ...

  6. 矩阵迹 tr(AB)=tr(BA)的证明

    其实更为直观的理解是:AB与BA具有相同的对角线元素,因此tr(AB)=tr(BA)必然成立 ref:https://blog.csdn.net/silence1214/article/details ...

  7. [转]Python测试框架对比----unittest, pytest, nose, robot framework对比

      测试框架 什么是框架? 框架(Framework)是整个或部分系统的可重用设计,框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求 ...

  8. 51nod 2488 矩形并的面积

    在二维平面上,给定两个矩形,满足矩形的每条边分别和坐标轴平行,求这个两个矩形的并的面积.即它们重叠在一起的总的面积. 收起   输入 8个数,分别表示第一个矩形左下角坐标为(A,B),右上角坐标为(C ...

  9. 51nod 2387 戴德兰

    牛牛非常喜欢赶deadline.输入n, c, d一共有n个任务,第i个任务需要a[i]分钟完成 特别的,在最后d分钟,牛牛的效率会变成双倍(耗时变为一半) 可能出现一个任务前半部分不在最后d分钟,后 ...

  10. 2019红帽杯部分wp

    xx 程序首先取输入的前4个字符作为xxtea加密的密钥之后进行xxtea加密.接着进行位置置换操作,然后又进行了以3个为一组的异或 首先逆向解出xxtea加密之后的结果 #include<st ...