大概的样子

这是大致的样子~

写之前想说的

  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. Django分页设置

    1. """ 分页组件使用示例: obj = Pagination(request.GET.get('page',1),len(USER_LIST),request.pa ...

  2. 使用session的监听器获取当前在线人数

    1首先在web.xml中配置Session的监听器 2创建监听器并且继承HttpSessionListener 3.在jsp中导入监听器 4.获取当前在线人数 5.配置到公共网络(使用natapp的免 ...

  3. 20164317《网络对抗技术》Exp2 后门原理与实践

    1.实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启动 (3)使用MSF meterpreter(或其他软件)生成可执行文 ...

  4. openvswitch BFD 简介

    为了保护关键应用,网络中会设计有一定的冗余备份链路,网络发生故障时就要求网络设备能够快速检测出故障并将流量切换至备份链路以加快网络收敛速度.目前有些链路(如POS)通过硬件检测机制来实现快速故障检测. ...

  5. Organising the Organisation(uva10766)(生成树计数)

    Input Output Sample Input 5 5 2 3 1 3 4 4 5 1 4 5 3 4 1 1 1 4 3 0 2 Sample Output 3 8 3 题意: 有一张图上有\( ...

  6. docker和定时任务

    查看linux信息 cat /etc/issue 以id运行容器docker start 1c3339d7f9a8通过id结束容器 docker kill 1c3339d7f9a8 Ubuntu 安装 ...

  7. 【javascript】iOS Safari 中点击事件失效的解决办法

    问题描述 当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. ...

  8. mysql编写存储过程(1)

    存储过程:其实就是存储在数据库中,有一些逻辑语句与SQL语句组成的函数.由于是已经编译好的语句,所以执行速度快,而且也安全. 打开mysql的控制台,开始编写存储过程. 实例1: 编写存储过程: 执行 ...

  9. python学习笔记07-元组 字典

    元组: 元组里面的元素不可修改  创建后只可读  不可写 一个元素的时候 在后面加一个逗号 字典: 无序的 Python 中唯一的映射类型 采用键值对的形式存储数据 key必须是可哈希的  可哈希表示 ...

  10. Python小白学习之路(七)—【字典】【字典的功能】【布尔值】

    字典(dict) 基本结构: d = {key1 : value1, key2 : value2 } dict = {'} key : value称为字典的键值对. 每个键 key和值value 之间 ...