这是大体的样子~shell
这里有一个问题,就是在使用ssh的时候会有一个等待用户输入密码的过程。不能直接一条命令连接ssh。咱们能够经过 expect 来解决。bash
不懂的能够百度一下,很简单的。O(∩_∩)O哈哈~ssh
首先解决ssh等待输入密码的问题,首先 咱们要安装 expect 。而后新建一个文件 ssh.sh。 工具
#!/bin/bash
#ssh_ip_user=hjx@127.0.0.1
ssh_ip_user=${1}
password=${2}
command=${3}
echo '正连接远程地址:'${ssh_ip_user}
expect -c " set timeout 30 spawn ssh -p22 ${ssh_ip_user} ${command} expect { \"yes/no\" { send \"yes\r\"; exp_continue } \"password\" { send \"${password}\r\" } } interact "复制代码
这里接受三个参数:ui
1. 第一个是ssh连接的用户名和Ip,例如:hjx@127.0.0.1spa
2. 第二个是ssh用户的密码。命令行
3. 第三个是要执行的远程命令,多个命令用 \n 隔开。code
这样第一个问题就解决了。cdn
咱们新建一个文件用来保存不少的ssh配置信息。新建文件 ssh.confblog
这里是分类:
这里写名称;这里写ip地址;这里写用户名;这里写密码
给你看一个例子:
sit-×××-service;127.0.0.1;user;ZheShiYiGeMiMa
复制代码
注意配置项配置要用英文的“';”隔开,不能有空格~~~
这时,咱们须要使用 awk 来处理这个配置文件,并格式上给他对齐,添加序号,而后打印出来。
awk 也很简单的。O(∩_∩)O哈哈~。能够这样写:
awk -F ';' '{print NR "\t" $1 "\t" $2 }' $conf_file复制代码
$conf_file 是配置文件的路径。
这样,就能够将文件以比较好看的形式打印出来了,而且每一行会有一个行号。
这里须要获取用户写入的行号,这样写:
echo '请输入你要链接的ip编号,回车结束。'
read host_index
复制代码
这时,用户输入的参数会以变量 host_index 的形式存在。接下里就是提取文件中用户输入行数的数据了,这样写:
choose_conf=`awk -F ';' 'NR=='"$host_index"' { print $0 }' $conf_file`
复制代码
$conf_file 依旧是配置文件的路径。啦啦啦~~~
假如咱们获取到的信息是这样的话: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 是你获取的某一行的信息。
而后就能够执行最开始咱们写的那个脚本 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 1
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 就好咯~~
若是想方便使用的话,还能够设置一个
alias sshp='sh /home/hjx/sh/sshp.sh'复制代码
这样只须要敲一个sshp就能够方便的使用了呢~