python pexpect ssh 远程登录服务器的方法
作者:西杭 发布时间:2021-07-10 22:28:53
标签:python,pexpect,ssh,服务器
使用了python中的pexpect模块,在测试代码之前,可输入python进入交互界面,输入help('pexpect'),查询是否本地含有pexpect模块。
如果没有,linux系统输入 easy_install pexpect便可自动安装。
测试代码,连接127.0.0.1
下面是我手动连接127.0.0.1, 发现只有在首次使用ssh连接127.0.0.1时,需要输入yes or no ,而后再次使用ssh ,则不需要再次输入yes
直接输入密码即可。
后续测试代码是二次链接,无需查询是否需要输入yes or 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的连接
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()
来源:https://blog.csdn.net/AcSuccess/article/details/72867959


猜你喜欢
- 半年前第一次做脚本编码的时候,由于没有什么使用经验,于是在51js上询问了一下encode脚本和normal脚本混用是否有什么问题呢?结果没
- 如何使用Index Server建立一个网站导航地图?程序代码如下:<html><head><title>asp教程之网站导航 -
- 技术背景在一些对python开源库代码的安全扫描中,我们有可能需要分析库中所使用到的函数是否会对代码的执行环境造成一些非预期的影响。典型的例
- 1。总体概要kNN算法已经在上一篇博客中说明。对于要处理手写体数字,需要处理的点主要包括: (1)图片的预处理:将png,jpg等格式的图片
- 实现了我的小跳槽以后,从8月7号入职了现在的这家公司,我好像是加入了救火队的行列,还没有开始开发新的模块,只是一直在实现已经上线模块中的新需
- 假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温随时间(天)变化的某种规律?
- 认知心理学家Donald A. Norman将人类的行动分解成七个阶段:1. 确定目标2. 确定意图3. 明确行动内容4. 执行5. 感知外
- 用Django开发网站的时候,前端页面内的文本框总是不能被设置为只读,找了一些资料发现可以在form class里面进行设置。方法一:首先在
- 本文实例讲述了C#实现远程连接ORACLE数据库的方法。分享给大家供大家参考。具体分析如下:使用该方法,只需要传入几个必要的参数就可以进行数
- 这篇文章主要介绍了Python变量作用域LEGB用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- queue模块简介queue模块是Python内置的标准模块,模块实现了三种类型的队列,它们的区别仅仅是条目取回的顺序,分别由3个类进行表示
- QSpinBox 是一个计数器控件,允许用户选择一个整数值,通过单击向上/向下按钮或按键盘上的上/下箭头来增加/减少当前显示的值,当然用户也
- 1 将文件保存到服务器本地upload.html<!DOCTYPE html><html lang="en&qu
- 一.实现思路本文讲解如何使用python实现一个简单的模板引擎, 支持传入变量, 使用if判断和for循环语句, 最终能达到下面这样的效果:
- 题目:一个txt文件中已知数据格式为:C4DC4D/mayaC4DC4D/suC4D/max/AE统计每个字段出现的次数,比如C4D、may
- 进入python的安装目录, 查看python解释器进入bin目录 # ls python(看一下是否有python解释器版本) # pwd
- 涉及到的函数为import matplotlib.pyplot as pltfrom skimage import measure, col
- 1. 整体思路首先我们来梳理下整体上的实现思路,首先一点:整体思路和 vhr 一模一样。考虑到有的小伙伴可能已经忘记 vhr 中前端动态菜单
- 前言:写小程序时,遇到个需要自定义回归时间的场景,下面是实现的效果图。 于我需求而言,我只需要用到fixed_in
- 前言我已经使用ES2015(ES6)的语法编写JavaScript程序很久了,并且喜欢上它提供的新特性带来的优雅和简洁。我最习惯的就是不再使