shell脚本实现通过ssh跳板机(动态密码)一键登陆服务器(相关问题与解决方案)
在我日常工作中,登陆服务器一般分为两个个步骤,通过ssh命令登陆跳板机,然后再通过跳板机登陆服务器。登陆跳板机又分为三个步骤,输入一长串用户名,再通过手机令牌查看动态密码,输入密码+动态码。这样每次登陆服务器都需要这么繁琐的步骤,在需要解决一个问题的时候,在登录上花的时间已经好几分钟,在同时登录多个服务器时更是让人头皮发麻,所以想写一个脚本,简化操作流程实现一键登录。
下面是第一个思路,通过bash脚本嵌套expect的方法,实现与命令行自动化交互,实现登录服务器,该办法在试验后发现有问题,造成该方法不能实施。后面会介绍具体问题
#!/bin/bashsalt="你的跳板机动态密码"
username="your username"
password="your password"
server="服务器名"
serverpass="服务器密码"
/usr/bin/expect <<-EOFspawn ssh "$username"
expect {"*yes/no*" {send "yes\n";exp_continue;}"*Password:" {send "$password$salt\n";exp_continue;}"*adadadw*" {send "ssh $server\r";exp_continue;}"*password:" {send "$serverpass\r";exp_continue;}
}
interact
EOF
第二个办法:
上面的方法会导致登上服务器后无法进行其他操作,最终会退出,所以采取下面的办法直接用expect脚本执行,然后通过另一个bash脚本调用该expect脚本
login.sh
#!/usr/bin/expectset salt [lindex $argv 0]
set username yourusername
set password yourpassword
set server 服务器名
set serverpass 服务器密码
spawn ssh "$username"
expect {"*yes/no*" {send "yes\n";exp_continue;}"*Password:" {send "$password$salt\n";exp_continue;}"*adadadw*" {send "ssh $server\r";exp_continue;}"*password:" {send "$serverpass\r";exp_continue;}
}
interact
test.sh
#!/bin/bashsalt=`python otp.py` #自己写的获取动态密码的python脚本,其他方法也可实现该脚本,这里就不公布了
./login.sh $salt
通过tesh.sh调用login.sh即可实现一键登录,不会出现第一个方法出现的问题
./test.sh
遇到的问题及总结
bash和expect嵌套写的注意事项
1.变量都要在bash里面定义
2.bash与expect嵌套用set定义变量就不管用了
3.bash 脚本嵌套expect脚本实现ssh自动登录会导致崩溃(第一个方法导致的问题,暂未找到具体原因)
更新一下:
有个小问题,登录上服务器后会有小卡顿:
原因是最后的 exp_continue;
把最后一个 exp_continue;去掉就可以了。
shell脚本实现通过ssh跳板机(动态密码)一键登陆服务器(相关问题与解决方案)相关推荐
- Jmeter JDBC请求-----数据库读取数据进行参数化 通过SSH跳板机连接数据库
前期准备: jdbc驱动:mysql-connector-java-5.1.7-bin.jar Jmeter 要链接MySQL数据库,首选需要下载mysql jdbc驱动包(注:驱动包的版本一定要与你 ...
- java连接跳板机linux,VSCode Remote ssh跳板机配置(linux环境)
VSCode真的是一款非常优秀的编辑器,配合各种插件就成为了一款称手的轻量级IDE,相信很多同学都有在服务器上跑实验的需求,我也不例外.一开始,我采用MobaXterm作为连接远程服务器的工具,但如果 ...
- Shell脚本批量创建用户并随机生成密码
Shell脚本批量创建用户并随机生成密码 要求:批量创建10个系统账号oldboy01-oldboy10,并设置生成密码(密码不同). 实现脚本: #!/bin/bash #Question3 for ...
- MCGS 根据时间实现动态密码进行登陆
简介 通过脚本对时间计算,实现动态密码,输入密码与动态密码进行校验,如果密码错误,提示密码错误请重新登陆. 建立三个画面 登陆界面 按钮组件,用于密码输入完成,确定登陆.输入框组件,输入密码. 密码错 ...
- Linux下Dialog+Shell三层目录专业规范跳板机脚本
#Dialog+Shell介绍 Dialog+Shell结合使用,方能体现出Dialog图形化的效果,在运维的时候,使用图形化界面,能给你一个更直观的感受,相信你会喜欢上他的 #创建脚本目录 [ro ...
- linux互信封装脚本,使用shell脚本实现自动SSH互信功能
说假设有一个1000台节点的Hadoop集群,要配置节点之间的SSH免密码登录,该如何用shell脚本实现? #!/bin/expect #循环1000台机器的IP地址,生成密钥文件authorize ...
- 使用shell脚本实现自动SSH互信功能
原文:http://www.cnblogs.com/vovlie/archive/2012/09/16/2688020.html 说假设有一个1000台节点的Hadoop集群,要配置节点之间的SSH免 ...
- java 远程shell脚本_java通过ssh连接服务器执行shell命令详解及实例
java通过ssh连接服务器执行shell命令详解 java通过ssh连接服务器执行shell命令:JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转 ...
- linux实现自动互信,Linux 使用shell脚本实现自动SSH互信功能
说假设有一个1000台节点的Hadoop集群,要配置节点之间的SSH免密码登录,该如何用shell脚本实现? #!/bin/expect #循环1000台机器的IP地址,生成密钥文件authorize ...
最新文章
- java 日志 生成器_自动生成 java 测试 mock 对象框架 DataFactory-01-入门使用教程
- testNG的DataProvider返回IteratorObject[]的妙用
- 我觉得有不少人被Spring带着跑偏了!
- 2016012090+小学四则运算练习软件项目报告
- 【Python基础】python使用openpyxl操作excel
- WLAN产品形态之分层架构
- python分析nginx日志
- 怎么将aspx网站改为静态页面?
- 在线富文本编辑器FckEditor配置(.Net Framework 3.5)
- JAR清单类路径不仅适用于Java Application Launcher
- centos7安装oracle12c 三
- 【转】.NET 的 WebSocket 开发包比较
- LeetCode 1663. 具有给定数值的最小字符串(贪心)
- centos7安装MongoDB(亲测)
- Spring Boot 事务支持
- 设计模式之单实例模式(Singleton)
- linux nfs async,Linux下NFS共享以及oracle rman挂载优化
- SQL中between过滤数据
- 牛牛之瀛洲公园(09.10)
- 前端图片格式与浏览器性能优化