Shell登陆远程服务器
现场服务器较多,密码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登陆远程服务器的更多相关文章
- ssh免密码登陆远程服务器
ssh免密码登陆远程服务器 在使用windows下的cygwin或者在linux下使用Terminal进行远程服务器登陆测试的时候总是会要求输入账号密码,对于此我们可以使用ssh将公钥放在服务器上的方 ...
- 通过expect免自动输入密码登陆远程服务器
通过expect免自动输入密码登陆远程服务器 1.前提必须已经安装expect 2.新建login.sh,文件内容如下 #!/usr/bin/expect -f spawn ssh root@140. ...
- Linux 系统免密码登陆远程服务器
在当前Linux生成公钥私钥ssh-keygen公钥私钥存放路径为:~/root/.ssh/id_rsa id_rsa.pub 登陆被远程主机,进入目录~/root/.ssh/是否存在authoriz ...
- [ SHELL编程 ] 远程服务器传输文件
在shell编程中经常需要获取远程服务器文件.手工操作中使用scp命令完成.为避免脚本执行scp输入密码进行交互,需先建立本机服务器当前用户和远程服务器指定用户的信任关系.具体代码见操作实例,重点关注 ...
- linux expect自动登陆远程服务器 批量管理服务器
#!/usr/bin/expect set ipaddress [lindex $argv 0] set passwd [lindex $argv 1] set timeout 3 spawn ssh ...
- 登陆远程服务器的Tomcat 8的manger的页面403
访问远程服务器Tomcat 8的管理页面报错 在远程服务器上安装了一个tomcat8.5,配置好用户后重新启动tomcat ,发现:8080可以访问,但是进入:8080/manager/html页面报 ...
- linux ssh免密登陆远程服务器
10.170.1.18服务器免密登录到10.170.1.16服务器 首先登入一台linux服务器(10.170.1.18),此台做为母机(即登入其他linux系统用这台做为入口):执行一行命令生成ke ...
- xmanger图形化登陆远程服务器
由于网上的资料比较杂,经过本人整理实际操作验证,保证ok 本人的服务器系统为centos5.8 下面的都是centos服务器上的操作,需要简单的配置下: win客户端使用xmanger软件:首先是服 ...
- 【转】使用shell登录远程服务器执行多条命令,ssh登录之后执行脚本文件
原文:https://blog.csdn.net/qq_36622490/article/details/100773589 这个需求主要是我在jenkins中pipeline的代码里,需要使用she ...
随机推荐
- 字符串导出xml文件并弹出下载对话框
转自:https://blog.csdn.net/zhandingfeng/article/details/53887354 导出单个xml文件:[java] view plain copy ...
- CRM-Modelformset
CRM-Modelformset 效果图 利用modelformset实现上面的效果: views.py文件: from user.formself.myform import RegForm, Cu ...
- openwrt配置strongswan对接hillstone ipsec的笔记
一.主要参考资料: https://openwrt.org/docs/guide-user/services/vpn/ipsec/strongswan/roadwarrior https://open ...
- linux 利用LDAP身份集中认证
碰巧所在的公司用到了ldap 集中身份认证,所有打算研究下这套架构,但是看遍了网络上的很多教程,要么不完整,要么就是照着根本弄不出来,十月一研究了三天,结合八方资源终于弄出来了,真是不容易,哎,特此记 ...
- 利用 Create React Native App 创建 React Native 应用
$ npm i -g create-react-native-app $ create-react-native-app my-project $ cd my-project $ npm start
- linux系统编程之文件与io(二)
今天继续学习文件与io,话不多说,开始进入正题: 文件的read和write系统调用: 说明:函数中出现在size_t和ssize_t是针对系统定制的数据类型: 下面以一个实现文件简单拷贝的示 ...
- selenium常用的API(三)获取网页title、html源码
获取网页title 获取页面title的方法可以直接用driver.title获取到,然后可以把获取到的结果用做断言. #encoding=utf-8 from selenium import web ...
- 51nod 2488 矩形并的面积
在二维平面上,给定两个矩形,满足矩形的每条边分别和坐标轴平行,求这个两个矩形的并的面积.即它们重叠在一起的总的面积. 收起 输入 8个数,分别表示第一个矩形左下角坐标为(A,B),右上角坐标为(C ...
- RSA 加密 解密 (长字符串) JAVA JS版本加解密
系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...
- 数据库应用之--Redis+mysql实现大量数据的读写,以及高并发
一.开发背景 在项目开发过程中中遇到了以下三个需求: 1. 多个用户同时上传数据: 2. 数据库需要支持同时读写: 3. 1分钟内存储上万条数据: 根据对Mysql的测试情况,遇到以下问题: 1. 最 ...