Python使用pexpect实现SSH远程登录服务器的完整指南
本文详细介绍如何利用Python的pexpect模块实现SSH远程登录服务器。通过对比基础pexpect连接与更简便的pxssh模块,演示了处理首次连接确认、密码输入及命令执行的全过程。此外,文章提供了基于pxssh的批量连接脚本示例,适用于自动化运维场景,帮助开发者高效管理多台服务器。
环境准备与模块验证
首先,确保环境中已安装Python的pexpect模块。在运行测试代码前,可以启动Python交互环境,执行help('pexpect')命令来验证本地是否已包含该模块。
若系统未预装该模块,在Linux环境下可通过执行easy_install pexpect命令进行自动安装。
基础SSH连接实现
接下来编写测试代码,尝试连接本地回环地址127.0.0.1。
手动测试连接127.0.0.1时发现,仅在首次通过SSH连接该主机时,系统会提示输入yes或no以确认主机密钥;后续再次连接则无需重复此步骤。
在确认主机密钥后,直接输入密码即可完成连接。

后续的测试代码针对的是二次连接场景,因此无需再处理yes或no的确认交互。
import pexpect
def send_command(child, cmd):
child.sendline(cmd)
child.expect(PROMT)
print child.before
def connect(user, host, password):
ssh_newkey = 'Ary you sure you want to continue connecting'
connStr = 'ssh ' + user + '@' + host
child = pexpect.spawn(connStr)
'''
ret = child.expect([pexpect.TIMEOUT, ssh_newkey])
if ret == 0:
print "[-] Error 1"
return
elif ret == 1:
child.sendline('yes')
'''
res = child.expect([pexpect.TIMEOUT, '[P|p]assword:'])
if res == 0:
print "[-] Error 2"
return
elif res == 1:
child.sendline(password)
child.expect(PROMT)
return child
def main():
host = '127.0.0.1'#测试主机ip或者主机名
user = 'root'#测试账号
password = 'root'#测试密码
child = connect(user, host, password)
send_command(child, 'w')
if __name__ == '__main__':
main()
使用pxssh简化连接
为了简化SSH连接过程,推荐使用pxssh模块,它能以更简洁的方式完成SSH连接操作。
from pexpect import pxssh
def send_command(s, cmd):
s.sendline(cmd)
s.prompt()
print s.before
def connect(host, user, password):
try:
s = pxssh.pxssh()
s.login(host, user, password)
return s
except:
print "error"
exit(0)
def main():
s = connect('127.0.0.1', 'root', '15110506010')
send_command(s, 'whoami')
if __name__ == '__main__':
main()
批量服务器连接示例
利用上述方法,可以实现对多台服务器的批量连接与管理。
from pexpect import pxssh
botnet = []
class client:
def __init__(self, user, host, password):
self.user=user
self.host=host
self.password=password
self.child=self.connect()
def connect(self):
try:
s = pxssh.pxssh()
s.login(self.host, self.user, self.password)
return s
except Exception, e:
print "Error *" + str(e)
def send_command(self, cmd):
self.child.sendline(cmd)
self.child.prompt()
return self.child.before
def addclient(user, host, password):
c = client(user, host, password)
botnet.append(c)
def botnetcommand(command):
for c in botnet:
output = c.send_command(command)
print "ip: " + str(c.host)
print output
def main():
addclient('root', '127.0.0.1', 'toor')
addclient('root', '****', '*****')
botnetcommand('pwd')
if __name__=='__main__':
main()
以上就是Python利用pexpect模块实现SSH远程登录服务器的完整内容分享,希望能为读者提供参考与帮助,欢迎持续关注与支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













