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

  • Post author:
  • Post category:python



如何通过 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 代码后会调用 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 代码中测试:



此时便可以隐藏 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 调用 bat 运行 vbs 脚本实现的自动打开 SecureCRT 并自动连接特定主机的方法了。希望大家有更好的方法的提出来共同学习,也希望我的方法对大家也能有一点帮助。





版权声明:本文为wxbmelisky原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。