• Linux shell脚本批量测试ssh密码


     因为一些原因,团队会经常改密码,但不是全部服务器都要改密码,这就造成登录时候要试多次密码

    所以,就想到能否让脚本自动匹配密码,毕竟密码就是固定的那几个。

    刚开始想到用expect来做,但是在网上又找到了另外一个sshpass软件

    0x00: 安装
     方法一: 联网状态

    # yum -y install sshpass
    

     方法二:没有网络,就用编译安装包,下面是下载地址

    https://sourceforge.net/projects/sshpass/files/
     or
    https://pan.baidu.com/s/1pLNxeLd
     or
    wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
    

      下载完还要编译安装,要在root下才有权安装。

    # tar -zxvf sshpass-1.06.tar.gz
    # cd sshpass-1.06/
    # ./configure
    # make
    # make install
    

      基本环节搭建好了,内容摘抄其他博客,原文链接在最下面

    0x01:安装expect命令

    # yum -y install expect

    * 下面脚本里 的中文注释是为了方便阅读,实际使用时请删除,否则在某些系统环境可能报错。

    0x02:写shell脚本来循环匹配,文件名get_password.sh

    #!/bin/bash
    ## file name: get_password.sh
    
    ## 要测试的IP,是参数传入的
    test_ip=$1
    ## 密码列表,空格分隔
    pwd_lists="root rootroot test123 password Admin123"
    ## 记录找到密码的文件
    psss_history_file="pwd_history.txt"
    
    ## 判断,如果没有写参数则,提示并退出
    if [ $# -eq 0  ];then
    	echo -e "\nUage: \n\tsh $0 127.0.0.1"
    	exit
    fi
    
    ## 打印历史密码
    echo -e "\n-----------------  history passwd  -----------------"
    cat ${psss_history_file} |grep ${test_ip}
    echo -e "-----------------  history passwd  -----------------\n"
    
    ## 循环遍历
    for pwd_list in ${pwd_lists} 
    do
    	sshpass -p ${pwd_list} ssh -o StrictHostKeyChecking=no root@${test_ip} "exit"
            ## 判断sshpass执行是否成功
    	if [ $? -eq 0 ];then
    		## 提示信息,当前正在测试的IP 和密码
    		echo -e "\n[ Success ] IP=\"$1\"  password=\"${pwd_list}\" "
                    ## 将找到的密码保存到文件里
    		echo "$1:${pwd_list}" >> ${psss_history_file}
    		## 找到密码后,退出脚本,不是退出循环
    		exit 
    	else
                    ## 提示当前这个密码没有成功
    		echo "[ Failure ] password=\"${pwd_list}\""
    	fi
    done
    

      

    0x03: 远程调用

       因为某些原因,本地执行脚本访问IP会有限制,比如“安全人员”只允许员工机器登录很少的IP网段,但是服务可以访问所有网段。  

      我们可把get_password.sh文件放到服务的某个路径下,我们从本地传参给服务器调用。

       这里我们把上面的get_password.sh脚本,放到服务器上test用户的"家"目录下,绝对路径/home/test/50_get_password/get_password.sh

    文件:l_get_password.sh

    #!/bin/bash
    ##file name : l_get_password.sh 
    
    ## 用expect调用exp脚本连接远程50服务器,传参过去
    expect 50_get_password.exp $1  
    

      

     文件:50_get_password.exp (因为IP里带50,所以文件名前面加了50好区分)

    #!/usr/bin/expect
    ## file name : 50_get_password.exp
    
    ## 接收传入参数,赋值给ip这变量,类似shell脚本的ip=$1语法
    set ip  [lindex $argv 0]
    ## 拼接命令,cmd是变量,“”号里是要执行命令,命令必须放到“”里
    set cmd "cd 50_get_password && sh get_password.sh $ip" 
    ## 登录的服务器密码的变量
    set password "test123"
    ## 超时,必须设置时间(秒数根据具体情况设置),否则探测过程中自动退出
    set timeout 45
    ## 用ssh方式登录服务器,并执行$cmd里的命令 spawn ssh test@192.168.1.50 "$cmd" expect { ## 首次登录时有带yes/no字样的文字提示,就发送yes过去 "yes/no" {send "yes\r";exp_continue} ## 登录时有带passwor字样的文字提示,就把密码test123发送过去 "*password*" {send "$passwd\r"} } expect eof

      

      

    0x04:使用

    本地使用:

    # sh get_password.sh 192.168.1.66  

    远程调用:

    # sh l_get_password.sh 192.168.1.66
    

      

    0x05:调试

    如果使用中遇到问题,可以加参数来观察脚本的值

    sh文件

    # sh -x get_password.sh 192.168.1.66

    exp文件

    expect -d 50_get_password.exp
    

      

    https://blog.csdn.net/weixin_34402090/article/details/89779335

    https://blog.csdn.net/qq_30553235/article/details/78711491

  • 相关阅读:
    读码的逻辑设计
    简单拼接图像的tile_images和tile_images_offset算子
    select_shape_proto算子的几种特征模式含义解析
    Photoshop中的高斯模糊、高反差保留和Halcon中的rft频域分析研究
    sort_contours_xld算子的几种排序方式研究
    Region在connection前后进行“交并差”等操作的异同
    Halcon中xld的常见特征的含义总结
    Halcon选择一堆region中面积第N大的region的算法实现
    从去除毛刺的策略看开运算opening_circle和闭运算closing_circle的异同
    Halcon阈值化算子dual_threshold和var_threshold的理解
  • 原文地址:https://www.cnblogs.com/wutou/p/15738391.html
Copyright © 2020-2023  润新知