通过 python 打开 SecureCRT 软件并实现自动连接主机

如何通过 python  打开 SecureCRT 软件并实现自动连接主机?这个问题是我在实际应用中遇到的问题。做运维的工作上经常需要通过 SecureCRT 连接某个系统内的所有主机,话说 boss 们嫌这样太麻烦,希望通过编写一个程序软件,在该软件上通过下拉框选择特定的系统,再点击按钮就可实现连接该特定系统的所有主机。这是很好的想法,毕竟还是要方便嘛!
通过 python 里的 os.system() 可以打开外部程序,当然也可以打开 SecureCRT 啦,通过os.system('...\\SecureCRT.exe') 即可(其中 ... 代表 SecureCRT 的安装路径),但是这仅仅是打开了 SecureCRT 软件而已,并不能实现自动连接主机啊。实际上通过运行 bat 文件调用 vbs 脚本可以实现自动打开 SecureCRT 并连接特定的主机。

我们写的 login.bat 文件的代码如下:

@set /p name=用户名:
@set /p pwd=密码:
 
start "" "D:\Program Files\SecureCRT\SecureCRT.exe" /SCRIPT "D:\test\login.vbs" /arg %name% /arg %pwd%
:end
exit
login.vbs 脚本的代码如下:

#$language = "VBScript"
#$interface = "1.0"
 
Dim UsrID  '用户名
Dim UsrPass    '密码
 
Public Sub login
  UsrID=crt.Arguments.Getarg(0)
  UsrPass=crt.Arguments.Getarg(1)
End Sub
 
Sub main
  login
  WXB
End Sub
 
Sub WXB
crt.Screen.Synchronous = True
crt.session.connectintab("/SSH2 /L " & UsrID & " /PASSWORD " & UsrPass & " /C 3DES /M MD5 192.168.206.128")
crt.session.connectintab("/SSH2 /L " & UsrID & " /PASSWORD " & UsrPass & " /C 3DES /M MD5 192.168.206.129")
End Sub

login.bat 代码中的前两行表示设置两个变量 name 和 pwd,"/p" 表示通过弹出 cmd 窗口输入变量值。start 那一行表示通过 SecureCRT 调用 login.vbs 脚本并把 name 和 pwd 这两个变量的值作为参数传进去。
login.vbs 代码中通过 Dim 声明了 UsrID 和 UsrPass 这两个变量,crt.Arguments.Getarg(0) 和 crt.Arguments.Getarg(1) 表示获得 login.bat 传进来的两个参数,也就是 %name% 和 %pwd%。crt.session.connectintab("/SSH2 /L " & UsrID & " /PASSWORD " & UsrPass & " /C 3DES /M MD5 192.168.206.128") 这行代码表示以打开一个新标签页的形式连接主机,我这里测试的是连接两太主机,ip 分别为 192.168.206.128 和 192.168.206.129。这两台主机登录的用户名和密码都是一样的,都是通过 login.bat 传进来的。
现在我们再在 python 中通过 os.system('D:\\test\\login.bat') 来调用 login.bat 实现自动连接主机。
通过 python 打开 SecureCRT 软件并实现自动连接主机_第1张图片

如上图所示,执行 python 代码后会调用 bat 文件从而弹出 cmd 窗口,输入正确的用户名和密码即可实现打开 SecureCRT 软件并自动连接主机。

这时又出现了一个问题,Boss 又说每次连接主机时都要弹出 cmd 窗口并输入用户名和密码,太麻烦了,希望能够 python 执行时隐藏 cmd 窗口直接连接主机。这个考虑也是适当的,本来这样做就是为了方便嘛。
既然运行 bat 文件时不能弹出 cmd 窗口以输入用户名和密码,那就要把用户名和密码在 python 执行的时候通过参数的形式传到 bat 文件中。此时要将 login.bat 代码修改入下:
@set name=%1
@set pwd=%2
 
start "" "D:\Program Files\SecureCRT\SecureCRT.exe" /SCRIPT "D:\test\login.vbs" /arg %name% /arg %pwd%
:end
exit
代码中的 %1 和 %2 分别表示返回 bat 的第一个参数和第二个参数,用来接收 python 执行的代码中写入的用户名和密码这两个参数。用户名和密码这两个参数实际中是要通过提前输入验证的,这里我们直接写到 python 代码中测试:
通过 python 打开 SecureCRT 软件并实现自动连接主机_第2张图片

此时便可以隐藏 cmd 窗口,不用每次在 cmd 窗口中输入用户名和密码了。
这是我觉得已经大功告成了,便拿到生产上去测试,谁知道又出了一点小问题。有些人设置的密码中含有等于号“=”,将带有“=”的参数值传给 bat 文件运行时,bat 会把“=”当成赋值从而导致“=”之后的字符不能传进去,也就是说只能读取到“=”之前的字符,所以密码传到 bat 里就是错误的了。
这时又要给密码这个字符串动点手脚了。在 python 代码中传入密码这个参数时前后加上双引号,也就是os.system('D:\\test\\login.bat %s "%s"' %('melisky','123456'))。此时密码这个参数传到 bat 中是带双引号的,所以在 bat 中要把双引号再去掉,具体的 bat 文件的代码实现如下:
@set name=%1
@set pwd=%2
set pwd1=%pwd:~1,-1%
 
start "" "D:\Program Files\SecureCRT\SecureCRT.exe" /SCRIPT "D:\test\login.vbs" /arg %name% /arg %pwd%
:end
exit
第3行代码实现就是去掉传进去的密码中双引号。
此时再执行就可以实现带有“=”的密码的输入了:
通过 python 打开 SecureCRT 软件并实现自动连接主机_第3张图片

以上就是我 通过 python 调用 bat 运行 vbs 脚本实现的自动打开 SecureCRT 并自动连接特定主机的方法了。希望大家有更好的方法的提出来共同学习,也希望我的方法对大家也能有一点帮助。







你可能感兴趣的:(Python)