博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
写一个有字符界面的ssh链接工具
阅读量:7251 次
发布时间:2019-06-29

本文共 2800 字,大约阅读时间需要 9 分钟。

大概的样子

这是大致的样子~

写之前想说的

  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.1ssh_ip_user=${1}password=${2}command=${3}echo '正链接远程地址:'${ssh_ip_user}expect -c "set timeout 30spawn 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链接的工具.通过选择配置中的编号来链接sshmy_ssh='/home/hjx/sh/bin/ssh.sh'conf_file='/home/hjx/sh/conf/ssh.conf'clear#打印配置中的sshpwdawk -F ';' '{print NR "\t" $1 "\t" $2 }' $conf_fileecho '请输入你要连接的ip编号,回车结束。'read host_indexmax_line=`awk 'END {print NR }' $conf_file`if test $host_index -gt $max_linethen    echo "选择错误: 超过范围"    returnfiif test $host_index -lt 1then    echo "选择错误: 超过范围"    returnfi# 截取配置信息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 "选择错误:配置选择错误"    returnfi  #ssh_user_ip_pwd 示例 hjx@127.0.0.1 pwdsh $my_ssh $user_name@$ssh_ip $user_pwd复制代码

执行 sh sshp.sh 就好咯~~

如果想方便使用的话,还可以设置一个

alias sshp='sh /home/hjx/sh/sshp.sh'复制代码

这样只需要敲一个sshp就可以方便的使用了呢~

转载于:https://juejin.im/post/5c66137d51882562260d2028

你可能感兴趣的文章
老菜鸟苦战oracle asm
查看>>
SUSE LINUX下文件系统变只读的问题解决
查看>>
awk多维数组案例多角度解决实战
查看>>
《跟菜鸟学Cisco UC部署实战》-第 2 章 部署基本环境(一共12章,免费)
查看>>
DDOS***类型以及iptables防范ddos脚本
查看>>
使用顶层架构方法论进行航母作战模拟
查看>>
HSRP和VRRP基本工作原理
查看>>
SystemCenter2012SP1实践(4)安装SCVMM
查看>>
Windows Server 2012初阶安装使用记录
查看>>
正则表达式相关:C# RichTextBox显示html文本内容
查看>>
利用for循环打印实心棱形和空心棱形
查看>>
GRE over IPSEC 同时NAT-T(PAT)
查看>>
Linux Container (LXC)
查看>>
SQL Server 数据文件存储结构
查看>>
ipsec *** 多对等体
查看>>
Kubernetes 存储卷管理 PV&PVC(十)
查看>>
私有网盘nextcloud 12的问题处理及优化
查看>>
安装VMWare Tools
查看>>
XenDesktop7-基于SCVMM2012SP1的部署
查看>>
超融合、低成本、高可用私有云解决方案
查看>>