大概的样子

这是大致的样子~

写之前想说的

  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. Bonjour Operations

    https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/NetServices/Articles/NetServi ...

  2. ZZNU 2076(退役学长最后的神功 zz题)

    题目链接:http://acm.zznu.edu.cn/problem.php?pid=2076 输入一个T表示有T个样例每组实例一个整数n(0〈n〈1000接下来输入2*n个数字,代表一个2*n的矩 ...

  3. ajax post 400 bad request

    是前端ajax没有加声明:contentType:'application/json',

  4. [Swift实际操作]七、常见概念-(3)尺寸CGSize的使用详解

    本文将为你演示CGSize的使用 首先导入需要使用到的两个框架 import UIKit import QuartzCore 定义一个尺寸对象,尺寸对象包含宽度和和高度两个参数.从右侧的结果可以看出, ...

  5. vue复选框选中值获取

    <div id="d5"> <p>{{box5.toString()}}</p> <input type="checkbox&q ...

  6. 《JAVA与模式》之合成模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述 ...

  7. 干货 | 自适应大邻域搜索(Adaptive Large Neighborhood Search)入门到精通超详细解析-概念篇

    01 首先来区分几个概念 关于neighborhood serach,这里有好多种衍生和变种出来的胡里花俏的算法.大家在上网搜索的过程中可能看到什么Large Neighborhood Serach, ...

  8. 【xsy1116】数学题 奥数题

    真实奥数题 题目大意:给你正整数k$,r$.问你存在多少对$(x,y)$,满足$x<y$且$x^2+y^2=kz^2$,并将所有符合条件的数对输出. 数据范围:$r≤1e9$,$k={1,2,3 ...

  9. Collection、Set、List概念上的区别及关联

    类图如下:

  10. Java—关于String的分析

    一.两种赋值方式的比较 1.直接赋值法:String s1="abc"; 这种赋值方法用的最多,因为它可能不需要创建对象,或者只创建一次. 它首先会判断字符串常量池有没有存在字符串 ...