大概的样子

这是大致的样子~

写之前想说的

  1. 因为个人工作的的电脑是deepin系统的,系统本身的命令行非常好用,用第三方的ssh工具用不习惯,就想自己写一个。
  2. shell脚本是第一次写,写的不是很好,见谅。
  3. 关于字符界面这个东西,上网搜了好久,感觉好麻烦,所以这个界面就只是字符串输出形成的一个。比较简陋。
  4. 目前只支持用户名,密码的形式。

思路

  1. 用一个文件保存多个ssh的配置信息
  2. 在执行文建的时候将配置文件中的信心展示出来,并加上序号
  3. 等待用户输入序号
  4. 获取对应行数,按照一定的格式提取ssh配置信息
  5. 打开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链接工具的更多相关文章

  1. 使用whiptail写linux字符界面ssh链接工具2.0

    先看一下效果 选择分组 选择服务器 开始链接 为什么写 之前写过一个字符界面的链接工具,但是看起来比较简陋,他是这个样子的: 看起来十分不好看.后来在网上看到shell中有一个whiptail工具可以 ...

  2. powershell字符界面的,powershell加WPF界面的,2048游戏

    ------[序言]------ 1 2048游戏,有段时间很火,我在地铁上看有人玩过.没错,坐地铁很无聊,人家玩我就一直盯着看. 2 我在电脑上找了一个,试玩了以下,没几次格子就满了.我就气呼呼的放 ...

  3. 双11抢券,写一个自动打开页面的html,仅仅是设定时间打开抢券的页面

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  4. E: Invalid operation build-depgcc(给字符界面的ubuntu安装gcc 报错

    sudo apt-get  build-depgccE: Invalid operation build-depgcc 原因是中间少了个空格, 使用如下命令即可. sudo apt-get  buil ...

  5. 用Python写一个向数据库填充数据的小工具

    一. 背景 公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据. 而且本次项目是数据统计展示为主要功能,并没有研发对应的数据接入接口,所有展示数据源均来自数据库 ...

  6. 用node.js给C#写一个数据表的实体类生成工具

    虽然微软提供了T4模板,但是我感觉非常难用.哪儿比得上直接用脚本来写模板来的爽. 因为要给一个老项目做周边的工具,需要连接到数据库. 我习惯性用EntityFrameworkCore来做,因为毕竟从出 ...

  7. Python写一个Windows下的android设备截图工具

    界面版 利用python的wx库写个ui界面,用来把android设备的截图输出到电脑屏幕,前提需要安装adb,涉及到的python库也要安装.代码如下: import wx,subprocess,o ...

  8. [AST实战]从零开始写一个wepy转VUE的工具

    为什么需要 wepy 转 VUE "转转二手"是我司用 wepy 开发的功能与 APP 相似度非常高的小程序,实现了大量的功能性页面,而新业务 H5 项目在开发过程中有时也经常需要 ...

  9. 用C写一个web服务器(二) I/O多路复用之epoll

    .container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px } .conta ...

随机推荐

  1. Backbone学习笔记 - View篇

    Backbone是一种Web端的MVC框架,这里纪录学习Model,View和Collection的笔记. 1 View initialize构造函数 Backbone.View 与jQuery库紧密 ...

  2. NPOI 导出excel 通用方法

    public static byte[] ExportExcel<T>(Dictionary<string, string> columnsHeader, List<T& ...

  3. 使用math.js进行javascript精确计算

    javascript进行浮点运算会有尾差,比如算个0.1+0.7试试,得到的不是0.8 .这个问题可以使用math.js解决. Math.js是一款开源的JavaScript和Node.js数学库,用 ...

  4. 删除 iptables nat 规则

    原文:https://www.cnblogs.com/hixiaowei/p/8954161.html 删除FORWARD 规则: iptables -nL FORWARD --line-number ...

  5. LOJ#3088. 「GXOI / GZOI2019」旧词(树剖+线段树)

    题面 传送门 题解 先考虑\(k=1\)的情况,我们可以离线处理,从小到大对于每一个\(i\),令\(1\)到\(i\)的路径上每个节点权值增加\(1\),然后对于所有\(x=i\)的询问查一下\(y ...

  6. linux下redis安装步骤

    1.官网上下载redis最新包,我下载的是redis-5.0.3.tar.gz,上传至服务器 2.解压缩:tar zxvf redis-5.0.3.tar.gz3.cd redis-5.0.3进入re ...

  7. 【PKUSC2018】【loj6433】最大前缀和 状压dp

    这题吼啊... 然而还是想了$2h$,写了$1h$. 我们发现一个性质:若一个序列$p$能作为前缀和,那么在序列$p$中,包含序列$p$最后一个数的所有子序列必然都是非负的. 那么,我们 令$f[i] ...

  8. POJ 1046

    #include<iostream> using namespace std; #define MAXN 16 #define inf 100000000 struct node { in ...

  9. 【PaddlePaddle系列】手写数字识别

      最近百度为了推广自家编写对深度学习框架PaddlePaddle不断推出各种比赛.百度声称PaddlePaddle是一个“易学.易用”的开源深度学习框架,然而网上的资料少之又少.虽然百度很用心地提供 ...

  10. 在MVC过滤器中获取触发的Controller、Action、参数 等

    首先是实现接口System.Web.Mvc.IActionFilter的过滤器 获取Controller.Action.参数 方法一. string actionName = filterContex ...