本文和大家分享的是ssh专用类,在pexpect库中为我们提供了一个ssh专用类,这个专用类用于登录远程的主机,它也是spawn类的子类,并且ssh专用类中还添加了login和logout,这两个方法主要用于登录远程主机以及从远程主机中注销,并且为建立ssh连接制定了一些功能,在第一次连接时可以自动接受远程认证,而不出现yes或者no的提示,可以自动应用公钥登录而不用输入密码,这就是ssh专用类的使用方法,下面我们具体来看pxssh类,对于pxssh类,它的构造方法参数除无cmd参数其余与spawn类相同,我们在前面都做了相应的介绍,所以在这里就不在单独介绍了,在这个类中,第一个主要的方法就是login,这个login方法用于通过gis命令来远程登录主机的,所以它的主要参数包括server也就是要登录的服务器的名称或者是ip地址,username是要登录远程主机的用户名,password就是要登录远程主机的用户名所对应的密码是什么,其余的这些参数大多数就是用于一些指定原来的命令提示符以及指定新的命令提示符功能,同时这里面还有一些其他的参数,比如终端的类型以及登录时候的超时,登录的端口一般我们设为none,以表示为默认端口,还有是自动的提前符的重置,也就是命令提示符设置为true为自动重置,默认的也是自动重置,这就是login方法的使用,logout很简单它不需要提供任何参数就可以直接从远程主机中注销退出。对于pxssh类它还具有一个prompt方法,这个方法实际上是spawn类的一个包装,就是通过这个方法来进行匹配命令提示符,用before来进行查看结果的。
我们前面讲到spawn类的时候,我们匹配了一部分内容,然后匹配内容的前面部分就是保存在before这个属性中的,而这里我们匹配的命令提示符,所以命令提示符出现了以前的信息都会在before中进行查看。
下面一个方法是set_unique_prompt,这个方法是用于设置一个命令提示符的,也就是为我们远程登录的ssh命令设置一个远程的命令提示符,那么它实际上是login方法通过调用它改变提示符,也就是我们刚才讲到的那个地方默认为true来修改命令提示符,对于pxssh类它还有以下几个属性,第一个属性PROMPT,就是登录远程的命令提示符,用于prompt方法匹配,然后是options,就是代表pxssh类它的一些相关选项的字典。也就是我们在这个地方设置一些选项以后,它会保存在选项字典中。最后一个属性是force_password,也就是当我们设置它为true的时候,强制通过密码登录远程主机。
在pxssh类这个模块中,同时还进行了一个ExceptionPxssh错误,它实际上是一个异常,下面我们可以来看使用pxssh类来登录远程主机的实例。
首先我们启动一个用ssh登录的虚拟机,当他启动完成后,我们就可以在另一个虚拟机中来进行登录。
将pxssh这个类导入,然后我们来导入一个用于输入密码的模块,首先我们定义要登录的主机,那么这台虚拟机他的ip地址为192.168.1.22,所以我们在这里定义它为192.168.1.22,然后定义远程的登录用户名为root,我们需要一个密码,输入命令来获取密码,然后我们来实例化pxssh这个类,实例化的时候,我们不提供任何参数。调用这个类的login方法来进行登录,登录的文件名为hostname,登录的用户名为user,登录的密码就是pw。然后返回True,就表明为成功,然后现在我们向主机发送一些命令。
然后当它完全启动后,首先我们要导入相应的模块,将pxssh这个类导入,然后我们来导入一个用于输入密码的模块,首先我们定义要登录的主机,那么这台虚拟机他的ip地址为192.168.1.22,所以我们在这里定义它为192.168.1.22,然后定义远程的登录用户名为root,我们需要一个密码,输入命令来获取密码,然后我们来实例化pxssh这个类,实例化的时候,我们不提供任何参数。调用这个类的login方法来进行登录,登录的文件名为hostname,登录的用户名为user,登录的密码就是pw。然后返回True,就表明为成功,然后现在我们向主机发送一些命令让它执行。
同样的我们用“sendline”方法,用ls这个命令,然后调用它的prompt的方法来进行匹配,也就是匹配命令提示符,这个我们可以通过print这个属性来进行查看,可以看到远程的在主机上一些相应的信息,那么我们要看到它的中文信息也需要进行解码。
输入命令,进行解码然后我们可以看到它有哪些文件名以及相关的信息。
比如我们执行df的命令查看是什么情况,然后调用prompt方法,进行匹配,匹配完之后再次调用它的属性before,就可以查看到磁盘的使用情况,当我们发送完命令之后就要调用logout来进行退出登录,这样我们就退出了远程的登录,那么其实我们还可以通过它来进行关闭远程。
下面我们在另外一个终端中来进行测试,首先我们还是要导入相应的库,导入类pxssh,然后导入getpass这个模块,定义主机和用户名,然后获取密码,然后初始化这个类,这个时候也要提供一些参数,登录主机,然后返回为true就代表登录成功,此时我们可以像它发送一个关键的命令“poweroff”,就可以看到虚拟机正在关闭。
原文链接:http://www.maiziedu.com/wiki/library/ssh/