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

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

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

  0--正常

  1--传入参数错误

  2--timeout

  3--密码错误或到期

  脚本如下: 

  1. #!/usr/bin/expect
  2.  
  3. ###############################################################
  4. # 连接远程主机
  5. proc do_login {passwd} {
  6. set timeout
  7. set done
  8. set timeout_case
  9. set ps1 {PS1="doraemon#";export PS1}
  10. while {$done<} {
  11. expect {
  12. *assword* {
  13. send $passwd\r
  14. incr done
  15. }
  16. \[$%>#] {
  17. set done
  18. send $ps1\r\r
  19. break
  20. }
  21. timeout {
  22. set done
  23. switch -- $timeout_case {
  24. { send_user "try again ...\n" }
  25. { exit
  26. expect eof
  27. }
  28. }
  29. incr timeout_case
  30. }
  31. }
  32. }
  33. if {$done==} {
  34. exit
  35. expect eof
  36. }
  37. }
  38. ###############################################################
  39. # 执行命令
  40. proc exec_cmd {cmd} {
  41. expect -re "doraemon#$"
  42. send_user "\$cmd: $cmd\n"
  43. send $cmd\r
  44. }
  45. ###############################################################
  46. # 退出
  47. proc logout {} {
  48. expect -re "doraemon#$"
  49. send exit\r
  50. expect eof
  51. }
  52. ###############################################################
  53. if {$argc < } {
  54. send_user "Usage:$argv0 user pass ip command\n"
  55. exit
  56. }
  57. set user [lindex $argv ]
  58. set pass [lindex $argv ]
  59. set ip [lindex $argv ]
  60. set num
  61.  
  62. spawn ssh -o StrictHostKeyChecking=no -l $user $ip
  63. do_login $pass
  64. while {$num<$argc} {
  65. set proc [lindex $argv $num]
  66. # 捕获输出用
  67. set cmd "echo ==$ip==$user==`$proc`=="
  68. exec_cmd $cmd
  69. incr num
  70. }
  71. logout

  测试输出:

  1. [root@centos1 shcript]# ./logon.expect
  2. Usage:./logon.expect user pass ip command
  3. [root@centos1 shcript]# ./logon.expect root root123 127.0.0.1 hostname
  4. spawn ssh -o StrictHostKeyChecking=no -l root 127.0.0.1
  5. root@127.0.0.1's password:
  6. Last login: Fri Aug :: from 127.0.0.1
  7. [root@centos1 ~]# PS1="doraemon#";export PS1
  8. doraemon#
  9. doraemon#$cmd: echo ==127.0.0.1==root==`hostname`==
  10. echo ==127.0.0.1==root==`hostname`==
  11. ==127.0.0.1==root==centos1==
  12. doraemon#exit
  13. logout
  14. Connection to 127.0.0.1 closed.
  15. [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. object-c 连接mysql

    1. 通读 'mysql的使用' 2. 在Target->build setting 修改配置 User Header Search Paths 加入 /usr/local/mysql/incl ...

  2. BBPlus团队ALPFA冲刺(肖文恒)

    ALPHA冲刺博客 第一天:https://www.cnblogs.com/bbplus/p/11931039.html 第二天:https://www.cnblogs.com/bbplus/p/11 ...

  3. 04 -- 元类和ORM

    本篇主要介绍元类,为什么说一切皆对象:如何动态的创建类等:以及ORM,即什么是ORM等知识 一.元类 1.1 在Python中一切皆对象 在学习元类中我们首先需要了解一个概念-- python中一切皆 ...

  4. [ipsec][strongswan]strongswan源码分析--(零)引子

    目录 strongswan sa 资料 编译 启动 进程信息 结构 架构图与插件 配置运行 传统配置方法 新的配置方法 其他配置方法 详细的配置文档 配置示例 用法 加密库 libgmp libcry ...

  5. 快速搭建Kerberos服务端及入门使用

    快速搭建Kerberos服务端及入门使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Kerberos是一种网络身份验证协议.它旨在通过使用秘密密钥加密为客户端/服务器应用程序提 ...

  6. 基于k8s集群部署prometheus监控ingress nginx

    目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...

  7. MySQL数据库开发规范-EC

    最近一段时间一边在线上抓取SQL来优化,一边在整理这个开发规范,尽量减少新的问题SQL进入生产库.今天也是对公司的开发做了一次培训,PPT就不放上来了,里面有十来个生产SQL的案例.因为规范大部分还是 ...

  8. Py---StringIO and BytesIO 读取str

    # StringIO和BytesIO (1)StringIO顾名思义就是在内存中读写str.(2)StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO. # string ...

  9. 大数据之路week07--day06 (Sqoop 的使用)

    Sqoop的使用一(将数据库中的表数据上传到HDFS) 首先我们先准备数据 1.没有主键的数据(下面介绍有主键和没有主键的使用区别) -- MySQL dump 10.13 Distrib 5.1.7 ...

  10. 什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?

    只有TCP有粘包现象,UDP永远不会粘包! 粘包:在接收数据时,一次性多接收了其它请求发送来的数据(即多包接收).如,对方第一次发送hello,第二次发送world, 在接收时,应该收两次,一次是he ...