在我日常工作中,登陆服务器一般分为两个个步骤,通过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跳板机(动态密码)一键登陆服务器(相关问题与解决方案)相关推荐

  1. Jmeter JDBC请求-----数据库读取数据进行参数化 通过SSH跳板机连接数据库

    前期准备: jdbc驱动:mysql-connector-java-5.1.7-bin.jar Jmeter 要链接MySQL数据库,首选需要下载mysql jdbc驱动包(注:驱动包的版本一定要与你 ...

  2. java连接跳板机linux,VSCode Remote ssh跳板机配置(linux环境)

    VSCode真的是一款非常优秀的编辑器,配合各种插件就成为了一款称手的轻量级IDE,相信很多同学都有在服务器上跑实验的需求,我也不例外.一开始,我采用MobaXterm作为连接远程服务器的工具,但如果 ...

  3. Shell脚本批量创建用户并随机生成密码

    Shell脚本批量创建用户并随机生成密码 要求:批量创建10个系统账号oldboy01-oldboy10,并设置生成密码(密码不同). 实现脚本: #!/bin/bash #Question3 for ...

  4. MCGS 根据时间实现动态密码进行登陆

    简介 通过脚本对时间计算,实现动态密码,输入密码与动态密码进行校验,如果密码错误,提示密码错误请重新登陆. 建立三个画面 登陆界面 按钮组件,用于密码输入完成,确定登陆.输入框组件,输入密码. 密码错 ...

  5. Linux下Dialog+Shell三层目录专业规范跳板机脚本

    #Dialog+Shell介绍 Dialog+Shell结合使用,方能体现出Dialog图形化的效果,在运维的时候,使用图形化界面,能给你一个更直观的感受,相信你会喜欢上他的 #创建脚本目录  [ro ...

  6. linux互信封装脚本,使用shell脚本实现自动SSH互信功能

    说假设有一个1000台节点的Hadoop集群,要配置节点之间的SSH免密码登录,该如何用shell脚本实现? #!/bin/expect #循环1000台机器的IP地址,生成密钥文件authorize ...

  7. 使用shell脚本实现自动SSH互信功能

    原文:http://www.cnblogs.com/vovlie/archive/2012/09/16/2688020.html 说假设有一个1000台节点的Hadoop集群,要配置节点之间的SSH免 ...

  8. java 远程shell脚本_java通过ssh连接服务器执行shell命令详解及实例

    java通过ssh连接服务器执行shell命令详解 java通过ssh连接服务器执行shell命令:JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转 ...

  9. linux实现自动互信,Linux 使用shell脚本实现自动SSH互信功能

    说假设有一个1000台节点的Hadoop集群,要配置节点之间的SSH免密码登录,该如何用shell脚本实现? #!/bin/expect #循环1000台机器的IP地址,生成密钥文件authorize ...

最新文章

  1. java 日志 生成器_自动生成 java 测试 mock 对象框架 DataFactory-01-入门使用教程
  2. testNG的DataProvider返回IteratorObject[]的妙用
  3. 我觉得有不少人被Spring带着跑偏了!
  4. 2016012090+小学四则运算练习软件项目报告
  5. 【Python基础】python使用openpyxl操作excel
  6. WLAN产品形态之分层架构
  7. python分析nginx日志
  8. 怎么将aspx网站改为静态页面?
  9. 在线富文本编辑器FckEditor配置(.Net Framework 3.5)
  10. JAR清单类路径不仅适用于Java Application Launcher
  11. centos7安装oracle12c 三
  12. 【转】.NET 的 WebSocket 开发包比较
  13. LeetCode 1663. 具有给定数值的最小字符串(贪心)
  14. centos7安装MongoDB(亲测)
  15. Spring Boot 事务支持
  16. 设计模式之单实例模式(Singleton)
  17. linux nfs async,Linux下NFS共享以及oracle rman挂载优化
  18. SQL中between过滤数据
  19. 牛牛之瀛洲公园(09.10)
  20. 前端图片格式与浏览器性能优化

热门文章

  1. CTFSHOW愚人杯2023 部分wp
  2. 有向加权图 最大弱连通分支_指数基金介绍专栏:指数基金的加权方式,你都知道哪些?...
  3. go语言sql转struct在线工具
  4. 【Python数据分析——使用matplotlib制作南丁格尔玫瑰图】
  5. 极限、可导、可微、连续之间的关系
  6. Java从入门到精通章节练习题——第六章
  7. 基于sinc的音频重采样(二):实现
  8. QCustomPlot 示例实践--sinc离散序列
  9. 撰写全英文EI会议论文值得注意的要点!
  10. IOS开发入门(6)-自动布局(1)