当前位置 主页 > 服务器问题 > Linux/apache问题 >

    好用的ssh连接工具,如何用shell脚本写ssh快速连接工具

    栏目:Linux/apache问题 时间:2021-01-15 15:25

         用shell写ssh快速链接工具-1.0大概的样子:
     
         思路
         用一个文件保存多个ssh的配置信息
         在执行文建的时候将配置文件中的信心展示出来,并加上序号
         等待用户输入序号
         获取对应行数,按照一定的格式提取ssh配置信息
         打开ssh
          这里有一个问题,就是在使用ssh的时候会有一个等待用户输入密码的过程。不能直接一条命令链接ssh。我们可以通过 expect 来解决。
         开始写
         首先
         首先解决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
    "
         这里接收三个参数:
         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可以这样写:
    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
    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 就好咯