基于 shell 使用 expect 实现 SSH 自动登录远程服务器

为什么80%的码农都做不了架构师?>>>   hot3.png

相关知识点

  • expect

    expect 是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。

    说白了,expect 就是一套用来实现自动交互功能的软件。

    在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。这就是expect!!!

  • IFS

    IFS是存储定界符的环境变量,是Shell环境中的默认定界符字符串,默认值为空白字符(换行符、制表符、空格)

效果预览

主要文件

goto.sh

#!/bin/bash
################################################
# 基于 shell 脚本,实现 ssh 自动登录操作
# Usage:
# 		1. 修改 goto.conf ,追加服务器列表
# 		2. $ chmod u+x goto.sh goto.ex
# 		3. $ ./goto.sh
#
# 		或使用如下方式将 goto 加入当前用户全局使用:
# 		$ echo "alias goto=\"$PWD/goto.sh\"" >> ~/.zshrc
# 		$ source ~/.zshrc
# 		$ goto
# Author: whoru.S.Q <whoru@sqiang.net>
# Version: 1.5
################################################# 服务器列表文件
BASE_PATH=$(cd "$(dirname "$0")";pwd)
FILE_SERVER_LIST=$BASE_PATH"/goto.conf"# 暂存服务器列表,用于登录操作
CONFIG_ARR=()# 记录默认分隔符,用于修改后的还原
IFS_OLD=$IFS# 初始化
function menu {# 检查配置文件if [ ! -f $FILE_SERVER_LIST ]; thenecho "Config file not found."exit 1fi# 读取配置文件,显示待操作服务器列表clearecho "-------------------------------------"local serverNum=1 # 服务器列表序号local config=()while read line || [ -n "$line" ]doif [[ ${line} != \#* && "$line" != "" ]] ; thenIFS=, # 定义读取配置文件时的分隔符config=($line)CONFIG_ARR[$serverNum]=$line# serverName=$(echo $line | awk  -F::: '{print $1}')# serverIp=$(echo $line | awk  -F::: '{print $3}')spacenum=`expr 16 - ${#config[2]}`spaces=$(seq -s ' ' $spacenum | sed 's/[0-9]//g')echo -e " ${config[2]}$spaces- \033[32m$serverNum\033[0m.${config[0]}"serverNum=$(($serverNum+1))fidone < $FILE_SERVER_LISTIFS=$IFS_OLD # 还原分隔符echo "-------------------------------------"echo -en "请输入\033[32m序号\033[0m选择要登录的服务器: "handleChoice ;
}# 处理用户输入
function handleChoice {read -n 1 choicelocal serverListLength=${#CONFIG_ARR[@]}if [[ "$choice" -lt 1 || "$choice" -gt serverListLength ]]; thenecho -en "\n\033[31m无效的序号[ $choice ], 是否重新输入( y 是 | n 否 ):\033[0m"read -n 1 retryif [[ -n "$retry" && "$retry" = "y" ]]; thenclearmenu ;elseecho ""exit 1fielsesshLogin $choice;fi
}# 执行 ssh 登录
function sshLogin {IFS=, # 定义读取分隔符local config=(${CONFIG_ARR[$1]})# 默认用户 rootlocal user=${config[1]}if [[ $user == "" ]]; thenuser="root"fi# 默认端口号 22local port=${config[3]}if [[ $port == "" ]]; thenport="22"fi# 开始登录echo -e "\n\n\033[32m==>\033[0m 正在登录【\033[32m${config[0]}\033[0m】,请稍等...\n"sleep 1$(which expect) $BASE_PATH/goto.ex ${config[0]} ${config[2]} $port $user ${config[4]}echo -e "\n\033[32m==>\033[0m 您已退出【\033[32m${config[0]}\033[0m】\n"
}# 执行初始化
menu ;

goto.ex

#!/usr/bin/expectset SERVER_NAME [lindex $argv 0]
set IP [lindex $argv 1]
set PORT [lindex $argv 2]
set USER_NAME [lindex $argv 3]
set PASSWORD [lindex $argv 4]spawn ssh -p $PORT $USER_NAME@$IPexpect {-timeout 300"*assword" { send "$PASSWORD\r\n"; exp_continue ; sleep 3; }"yes/no" { send \"yes\n\"; exp_continue; }"Last*" {puts "\n登录成功\n";send "PROMPT_COMMAND='echo -ne \"\\033]0;$SERVER_NAME \\007\"' \r";send "clear\r";}timeout { puts "Expect was timeout."; return }
}
interact

goto.conf

# 格式:hostname,user,ip,port,pwd,commands
# 参数说明:
#   hostname 列表中显示的服务器名
#   user 登录用户,默认 root
#   ip 服务器 IP 地址
#   port 登录端口号,默认 22
#   pwd 登录密码
#   commands 登录成功后,默认执行的命令,比如切换到指定目录
# 备注: 以 # 开头的行是注释,不会被读取
#测试服务器,,192.168.1.56,,123456,cd /alidata/www && ls -l

更新地址:https://github.com/whorusq/ssh-autologin

转载于:https://my.oschina.net/antsky/blog/905336

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22634.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用docker安装lamp

docker search - s 10 lamp #搜索被收藏或使用较多的LAMP镜像&#xff0c;小伙伴们都推荐使用tutum/lamp docker pull tutum / lamp #下载镜像 #使用默认方式启动LAMP docker run - d - p 8080 : 80 - p 3306 : 3306 tutum / lamp #友提&#xff0c;如果报bind:addr…

centos7安装最新版git_https://my.oschina.net/antsky/blog/514586

whoru 发表于 2年前 阅读 5961收藏 10点赞 1评论 1 腾讯云 普惠云计算 0门槛体验>>> 摘要: 介绍yum和源码包安装的具体方式 方式一、yum安装 # yum install git 通过yum方式安装&#xff0c;版本比较旧&#xff0c;CentOS6.5上安装好是1.7.1版。如果想安装最新版或…

vim 基础版配置

为什么80%的码农都做不了架构师&#xff1f;>>> 只包含一些最常用的基础配置&#xff0c;以改进 vim 的初始状态。 使用&#xff1a;拷贝以下内容到 ~/.vimrc 文件中&#xff0c;没有此文件请自行创建。 """""""""&q…

tmux 基本配置

为什么80%的码农都做不了架构师&#xff1f;>>> 将以下内容拷贝到 ~/.tmux.conf 文件中&#xff0c;没有此文件的请自行创建。 ############################################################ # Author: whoru.S.Q <whorusqiang.net> # Link: https://githu…

Linux 下 MySQL 自动备份脚本

为什么80%的码农都做不了架构师&#xff1f;>>> 源码 mysqlDump.sh #!/bin/bash ################################################ # TODO: 备份当前服务器上指定的数据库&#xff08;多个库&#xff0c;以 , 分隔&#xff09; # 示例&#xff1a; # ./mys…

Shell 脚本入门及语法速查

为什么80%的码农都做不了架构师&#xff1f;>>> [TOC] 1. Hello World 1.1. 基本结构 创建 helloWorld.sh 文件&#xff0c;写入如下内容&#xff1a; #!/bin/bashecho "hello world"其中 #! 告诉系统其后路径所指定的程序是解释此脚本文件的 Shell 程序…

Linux 文件管理命令

复制文件 命令(copy)&#xff1a; cp 源文件 目标文件/文件夹 cp -r 源文件夹 目标文件夹删除命令 命令(remove)&#xff1a; rm 文件1 文件2 文件2 ... rm -rf 文件夹1 文件夹2...远程连接 SSH 用于进行Linux的远程操作, 其原理为: 打包命令 tar 打包命令 tar -czvf 文…

jy-13-LINUX——Linux

目录&#xff1a; 1、day01-Linux-什么是Linux 2、day02-Linux-文件管理命令 3、day03-Linux &#xff0d;Windows SSH 客户端工具 4、Linux&#xff0d;下载命令wget 5、在linux下启动tomcat命令 张闹&#xff1a; 1、day01-Linux-什么是Linux 是一个OS&#xff0c;是Uni…

mysql数据库insert语句怎么写_mysql数据库中的insert语句解决方案

mysql数据库中的insert语句 数据库t_users中&#xff0c;包括三个字段user_id,user_name,user_password 其中 user_id设置为自动递增 为了实现注册功能 注册想就有两项 用户名和 密码 我写的sql语句是&#xff1a; insert into t_users values (?,?); 表明插入用户名和密码两…

修改Xshell字体大小和颜色

博客专区 > XManager的博客 > 博客详情 修改Xshell字体大小和颜色 XManager 发表于7个月前 分享到&#xff1a; 一键分享 QQ空间 微信 腾讯微博 新浪微博 QQ好友 有道云笔记 原 修改Xshell字体大小和颜色 收藏 XManager 发表于 7个月前阅读 849收藏 1点赞 0 评论 1 …

抽象类和抽象方法

抽象类 抽象类只能被继承&#xff0c;无法直接实例化。避免被直接实例化调用&#xff0c;相当于半成品&#xff0c;不能拿来直接使用。抽象方法 抽象方法只能定义&#xff0c;无法写方法体。后续继承后重写。 public abstract class Person{String name;int age;public void w…

基于openai打造公司内部知识库问答机器人

ChatGPT概念 OpenAI是一家AI研究和部署公司&#xff0c;开发了一个针对普通用户的ChatGPT的免费对话式AI机器人产品&#xff0c;该产品基于GPT-3.5模型&#xff0c;同时也推出了一个付费的ChatGPT Plus产品&#xff0c;该产品基于GPT-4模型。很明显&#xff0c;在国内是使用不…

稚晖君刚拿了百度投资,估值被曝已超独角兽

衡宇 发自 凹非寺 “华为天才少年”稚晖君创业项目&#xff0c;刚被百度风投投了&#xff01; 量子位获悉&#xff0c;稚晖君创业项目智元机器人&#xff0c;日前完成了第三轮融资&#xff0c;市场估值被曝在十几亿美元左右。 天眼查App显示&#xff0c;本轮新增股东包括李彦宏…

40亿个QQ号,限制1G内存,如何去重?

40亿个QQ号&#xff0c;限制1G内存&#xff0c;如何去重&#xff1f; 40亿个unsigned int&#xff0c;如果直接用内存存储的话&#xff0c;需要&#xff1a; 4*4000000000 /1024/1024/1024 14.9G &#xff0c;考虑到其中有一些重复的话&#xff0c;那1G的空间也基本上是不够用…

一次读完半本「三体」!GPT-4最强竞品突然升级10万token,啃论文代码演示全搞定...

视学算法报道 编辑&#xff1a;编辑部 【导读】GPT-4 32K还没用上&#xff0c;ChatGPT最强竞品已经秒读「了不起的盖茨比」了。 在GPT-4 32K还在内测阶段&#xff0c;OpenAI的劲敌直接把上下文长度打了上去。 就在今天&#xff0c;初创公司Anthropic宣布&#xff0c;Claude已…

自从Notion有了AI……

“Notion AI是一款极其强大且易于使用的工具&#xff0c;可以帮助您整理知识&#xff0c;撰写文档和记录笔记。它为您提供了一个可以实现简单快捷导航的用户界面&#xff0c;使您可以轻松访问和管理所有的文件和资源。它还提供了一系列强大的功能&#xff0c;包括个性化定制&am…

100 美元“骗走” 15% 股份?估值 10 亿美元的创业独角兽 Stability AI 联合创始人起诉 CEO...

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 2022 年 8 月&#xff0c;一款名为 Stable Diffusion 的开源文本生成图像模型横空出世&#xff0c;惊艳四座。 一定程度&#xff0c;它的出现加速了 OpenAI 想更早推出 ChatGPT 的决心。 而就是这样一款…

HTML情人节表白代码,给女朋友的电子情书代码,女朋友表白代码

HTML情人节表白代码&#xff0c;给女朋友的电子情书代码&#xff0c;女朋友表白代码,可更换照片及表白内容。 使用方法 1、表白对话在assets/dialog.json 2、女朋友照片放在img中&#xff0c;直接替换即可 3、代码包需要放在WEB服务器里运行&#xff0c;本地用浏览器直接打开…

一封来自Java程序员的情书

点击上方“程序员小灰”&#xff0c;选择“置顶公众号” 有趣有内涵的文章第一时间送达&#xff01; 本文转载自公众号 Hollis 一直以来程序员都给大家以高智商低情商&#xff0c;不懂得浪漫不会哄女生开心的形象。但是&#xff0c;我觉得程序员都是浪漫的。对于这种错误观念&…

Python表白妙招,把情书写进她的照片里

前言 我的好兄弟们&#xff0c;2022年可算是过去了&#xff0c;这不马上要过年了吗 就是说&#xff0c;各位兄弟有对象了吗&#xff0c;没有的回家还要面对亲戚的各种提问 退一步来说&#xff0c;有心仪的人吗&#xff0c;如果有的话&#xff0c;就来看看这篇 程序员的表白小…