Python使用pexpect实现SSH远程登录服务器的完整指南

不晚
不晚
发布时间:2026-10-14 | 6人浏览过
原创

本文详细介绍如何利用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远程登录服务器的完整内容分享,希望能为读者提供参考与帮助,欢迎持续关注与支持。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表