写一个有字符界面的ssh链接工具
大概的样子
这是大致的样子~
写之前想说的
- 因为个人工作的的电脑是deepin系统的,系统本身的命令行非常好用,用第三方的ssh工具用不习惯,就想自己写一个。
- shell脚本是第一次写,写的不是很好,见谅。
- 关于字符界面这个东西,上网搜了好久,感觉好麻烦,所以这个界面就只是字符串输出形成的一个。比较简陋。
- 目前只支持用户名,密码的形式。
思路
- 用一个文件保存多个ssh的配置信息
- 在执行文建的时候将配置文件中的信心展示出来,并加上序号
- 等待用户输入序号
- 获取对应行数,按照一定的格式提取ssh配置信息
- 打开ssh
这里有一个问题,就是在使用ssh的时候会有一个等待用户输入密码的过程。不能直接一条命令链接ssh。我们可以通过 expect 来解决。
不懂的可以百度一下,很简单的。O(∩_∩)O哈哈~
开始写
首先
首先解决ssh等待输入密码的问题,首先 我们要安装 expect 。然后新建一个文件 ssh.sh。
#!/bin/bash
#ssh_ip_user=hjx@127.0.0.1
ssh_ip_user=${}
password=${}
command=${}
echo '正链接远程地址:'${ssh_ip_user}
expect -c "
set timeout
spawn ssh -p22 ${ssh_ip_user} ${command}
expect {
\"yes/no\" { send \"yes\r\"; exp_continue }
\"password\" { send \"${password}\r\" }
}
interact
"
这里接受三个参数:
1. 第一个是ssh链接的用户名和Ip,例如:hjx@127.0.0.1
2. 第二个是ssh用户的密码。
3. 第三个是要执行的远程命令,多个命令用 \n 隔开。
这样第一个问题就解决了。
然后
我们新建一个文件用来保存很多的ssh配置信息。新建文件 ssh.conf
这里是分类:
这里写名称;这里写ip地址;这里写用户名;这里写密码
给你看一个例子:
sit-×××-service;127.0.0.1;user;ZheShiYiGeMiMa
注意配置项配置要用英文的“';”隔开,不能有空格~~~
然后again
这时,我们需要使用 awk 来处理这个配置文件,并格式上给他对齐,添加序号,然后打印出来。
awk 也很简单的。O(∩_∩)O哈哈~。可以这样写:
awk -F ';' '{print NR "\t" $1 "\t" $2 }' $conf_file
$conf_file 是配置文件的路径。
这样,就可以将文件以比较好看的形式打印出来了,并且每一行会有一个行号。
然后again and again
这里需要获取用户写入的行号,这样写:
echo '请输入你要连接的ip编号,回车结束。'
read host_index
这时,用户输入的参数会以变量 host_index 的形式存在。接下里就是提取文件中用户输入行数的数据了,这样写:
choose_conf=`awk -F ';' 'NR=='"$host_index"' { print $0 }' $conf_file`
$conf_file 依旧是配置文件的路径。啦啦啦~~~
然后again and again and again
假如我们获取到的信息是这样的话:hejiaxuan;127.0.0.1;hjx;123123
我们需要提取里面的:用户名,ip,密码。可以这样写:
ssh_ip=`echo $choose_conf | cut -d";" -f2`
user_name=`echo $choose_conf | cut -d";" -f3`
user_pwd=`echo $choose_conf | cut -d";" -f4`
这里 $choose_conf 是你获取的某一行的信息。
然后again and again and again and~~~~
然后就可以执行最开始我们写的那个脚本 ssh.conf 愉快的链接ssh了
执行命令是这样的:
sh ssh.sh $user_name@$ssh_ip $user_pwd
最后
贴出来完整的代码吧~~~
文件名 sshp.sh
#!/bin/bash
# 用于简化ssh链接的工具.通过选择配置中的编号来链接ssh
my_ssh='/home/hjx/sh/bin/ssh.sh'
conf_file='/home/hjx/sh/conf/ssh.conf'
clear
#打印配置中的sshpwd
awk -F ';' '{print NR "\t" $1 "\t" $2 }' $conf_file
echo '请输入你要连接的ip编号,回车结束。'
read host_index
max_line=`awk 'END {print NR }' $conf_file`
if test $host_index -gt $max_line
then
echo "选择错误: 超过范围"
return
fi
if test $host_index -lt
then
echo "选择错误: 超过范围"
return
fi
# 截取配置信息
choose_conf=`awk -F ';' 'NR=='"$host_index"' { print $0 }' $conf_file`
ssh_mark=`echo $choose_conf | cut -d";" -f1`
ssh_ip=`echo $choose_conf | cut -d";" -f2`
user_name=`echo $choose_conf | cut -d";" -f3`
user_pwd=`echo $choose_conf | cut -d";" -f4`
if test $ssh_mark = $ssh_ip;
then
echo "选择错误:配置选择错误"
return
fi
#ssh_user_ip_pwd 示例 hjx@127.0.0.1 pwd
sh $my_ssh $user_name@$ssh_ip $user_pwd
执行 sh sshp.sh 就好咯
完
写一个有字符界面的ssh链接工具的更多相关文章
- 使用whiptail写linux字符界面ssh链接工具2.0
先看一下效果 选择分组 选择服务器 开始链接 为什么写 之前写过一个字符界面的链接工具,但是看起来比较简陋,他是这个样子的: 看起来十分不好看.后来在网上看到shell中有一个whiptail工具可以 ...
- powershell字符界面的,powershell加WPF界面的,2048游戏
------[序言]------ 1 2048游戏,有段时间很火,我在地铁上看有人玩过.没错,坐地铁很无聊,人家玩我就一直盯着看. 2 我在电脑上找了一个,试玩了以下,没几次格子就满了.我就气呼呼的放 ...
- 双11抢券,写一个自动打开页面的html,仅仅是设定时间打开抢券的页面
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- E: Invalid operation build-depgcc(给字符界面的ubuntu安装gcc 报错
sudo apt-get build-depgccE: Invalid operation build-depgcc 原因是中间少了个空格, 使用如下命令即可. sudo apt-get buil ...
- 用Python写一个向数据库填充数据的小工具
一. 背景 公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据. 而且本次项目是数据统计展示为主要功能,并没有研发对应的数据接入接口,所有展示数据源均来自数据库 ...
- 用node.js给C#写一个数据表的实体类生成工具
虽然微软提供了T4模板,但是我感觉非常难用.哪儿比得上直接用脚本来写模板来的爽. 因为要给一个老项目做周边的工具,需要连接到数据库. 我习惯性用EntityFrameworkCore来做,因为毕竟从出 ...
- Python写一个Windows下的android设备截图工具
界面版 利用python的wx库写个ui界面,用来把android设备的截图输出到电脑屏幕,前提需要安装adb,涉及到的python库也要安装.代码如下: import wx,subprocess,o ...
- [AST实战]从零开始写一个wepy转VUE的工具
为什么需要 wepy 转 VUE "转转二手"是我司用 wepy 开发的功能与 APP 相似度非常高的小程序,实现了大量的功能性页面,而新业务 H5 项目在开发过程中有时也经常需要 ...
- 用C写一个web服务器(二) I/O多路复用之epoll
.container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px } .conta ...
随机推荐
- FunDA(11)- 数据库操作的并行运算:Parallel data processing
FunDA最重要的设计目标之一就是能够实现数据库操作的并行运算.我们先重温一下fs2是如何实现并行运算的.我们用interleave.merge.either这几种方式来同时处理两个Stream里的元 ...
- Windows下的Nginx安装与配置(PHP)
因为一直用Apache作为服务器,对Apache的使用和配置已经相对熟悉,今天换了一下nginx的服务器,整个配置流程相对比较简单,php的配置没有任何变化. 主要的参考文档为 http://blog ...
- ubuntu 中 mongodb 数据读写权限配置
首先,我们先对mongodb 数据库的权限做一点说明: 1 默认情况下,mongodb 没有管理员账号 2 只有在 admin 数据库中才能添加管理员账号并开启权限 3 用户只能在所在的数据库中登录, ...
- [兼容]——IE 8 常见兼容性问题
接触了一个PC端网页开发的项目,要求兼容到IE 8,遇到不少坑,在这里记录下: 1.IE8 的兼容性视图 bug描述:IE8有许多新更新,但微软为了兼容以前的IE浏览器,提出了"兼容性视图& ...
- IdentityServer4登陆中心
1. 使用Vsual Studio Code 终端执行 dotnet new webapi --name IdentityServerSample 命令创建一个webapi 的 IdentitySer ...
- day 50 AJAX 初入门
前情提要: jq 学不好,ajax 难用好, 食用先请先确保最起码的jq 能会用 https://www.cnblogs.com/baili-luoyun/p/10473518.html jq ...
- Xpath string()提取多个子节点中的文本
<div> <ul class="show"> <li>275万购昌平邻铁三居 总价20万买一居</li> <li>00 ...
- 再学Java 之 解决No enclosing instance of type * is accessible
深夜,临睡前写了个小程序,出了点小问题 public class Test_drive { public static void main(String[] args){ A a = new A(); ...
- http编程(一)使用javaAPI实现
Java Http编程中常见的实现方式是使用Java 提供的API,另外就是使用Apache提供的 API 1.通过Java提供的API实现Http编程 类:URL:类 URL 代表一个统一资源定位符 ...
- Scala的下载和安装(本地)
前言 Scala版本的选法: 目前,Kafka库和JDBC并不支持Scala2.11的编译,以及结合大多数人的使用请来看. scala2.10.*为主,在这,scala2.10.4版本 ...