网上很多教程shell脚本远程ssh登录都需要Expect控件,然而实际环境有时候可能不允许安装Expect,本文设计了一个批量测试ssh登录的脚本,ssh 有个环境变量,SSH_ASKPASS ,设置了这个环境变量,并且当前会话不是终端时,ssh 在认证时会启动这个程序,从这个程序的标准输出来读取密码。这个功能本来是用于图形终端的,所以还要设置另一个环境变量 DISPLAY=’none:0’,让 ssh 不要试图访问 X11 。至于让进程脱离终端,使用 setsid 就可以了。代码如下:
#!/bin/bash
##########脚本运行说明#####################
#该脚本执行的时候需要有账号和密码两个参数
#运行时需要给脚本文件夹运行权限
#脚本运行时进入脚本所在文件夹,运行login.sh文件
#脚本包括两个参数,账号和密码,ip会选择同目录下的ip.txt
#运行示例;./login.sh account password
#脚本运行过程中会依次用指定的账号密码登录ip.txt中的ip
#登录超时时间为1s,返回参数不为0表示登录失败
#登录成功的ip放入success.txt文档中,登录成功的放在fail.txt中
#运行过程中会生成一个临时密码文档pwd.sh保存密码,运行结束删除
#程序运行之后可能出现运行该程序的窗口无法执行其它命令的情况,重开一个命令窗口就好
##########脚本运行说明#####################
_acc=$1 #运行时候的第一个参数为账号信息
_pwd=$2 #运行时候的第二个参数为密码信息
_ipp="$(cd `dirname $0`; pwd)/ip.txt" #ip地址列表文档所在位置
_tmppwd="