0
点赞
收藏
分享

微信扫一扫

python pexpec(linux专用),ssh连接

树下的老石头 2022-02-14 阅读 102

Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况。因为这种情况特别多而且繁琐,所以很多语言都有各种自己的实现。最初的第一个 Expect 是由 TCL 语言实现的,所以后来的 Expect 都大致参考了最初的用法和流程,整体来说大致的流程包括:

运行程序
程序要求人的判断和输入
Expect 通过关键字匹配
根据关键字向程序发送符合的字符串
TCL 语言实现的 Expect 功能非常强大,我曾经用它实现了防火墙设备的完整测试平台。也因为它使用方便、范围广,几乎所有脚本语言都实现了各种各样的类似与Expect的功能,它们叫法虽然不同,但原理都相差不大

pexpect 是 Python 语言的类 Expect 实现。

spawn() 方法用来执行一个程序,它返回这个程序的操作句柄,以后可以通过操作这个句柄来对这个程序进行操作。

from time import sleep
import pexpect
import sys
from pexpect.popen_spawn import PopenSpawn


child = pexpect.popen_spawn.PopenSpawn('ssh root@xxx.xxx.xxx.xxx')
# a = child.expect(':')
# print(a)
logFileId = open("logfile.txt", 'wb')
child.logfile = logFileId
child.expect('password')
# print(password)

child.sendline('password')
child.expect('root')
child.sendline('ls /')
child.expect('root')
child.sendline('exit')
index = child.expect(pexpect.EOF)
if index==1:
   child.sendline("exit")
   child.expect(pexpect.EOF)
print('this ip has exists in know_host files!')

pxssh类:为建立SSH连接定制了一些功能

# 远程登录主机执行命令
from pexpect.pxssh import pxssh
hostname = '172.17.2.117'
user = 'ginvip'
password = 'ginvip'
s = pxssh()
s.login(hostname, user, password)
s.sendline('ip addr')
s.prompt()				# 匹配命令提示符
print(s.before)			# 查看命令执行结果
s.logout()

举报

相关推荐

0 条评论