基于pexpect开发,可以实现ssh自动化登录脚本

pexpect是用于模拟人的行为的一个python包(windows下和linux下是不一样的)

 

pexpect中含有一个类class。具体用法参考官方文档

https://pexpect.readthedocs.io/en/stable/api/index.html

这里简述以下pexpect

pexpect.spawn(a),其中a对应于你需要运行的子程序,如是ssh连接还是ftp连接,或者是本地命令。然后返回的是一个句柄(可以简单理解为这个子程序的控制权)

child.expect(b),b是一个正则表达,表示用b去匹配子程序的返回(可以简单理解为子程序返回的字符串,然后用b去匹配),

child.before存储着正则匹配上放回之前的

child.after则存储着正则匹配成功的字符。

child.sendline(c)则表示把c输入给子程序。

 

实例:

基于pexpect开发,可以实现ssh自动化登录脚本

ssh过程:

1.启动子进程

2.如果ssh服务器开启了的话

3.如果是第一次连接,返回是否接受ssh_key(返回的内容包含ssh_newkey),用户发送yes。跳转到4

4.如果连接过则会要求输入密码,用户发送密码。

5.连接成功

6.发生命令

import pexpect
PROMPT =['#','>>>','>','\$']

def send_command(child,cmd):
    child.sendline(cmd)
    child.expect('nologin')
    child.sendline("ls -al")
    child.expect(pexpect.EOF)
    print child.before
    #print child.after

def connect(user,host,password):
    ssh_newkey='Are you sure you want to continue connecting'
    connStr='ssh '+ user +'@'+host
    child = pexpect.spawn(connStr)
    ret=child.expect([pexpect.TIMEOUT,ssh_newkey,'[P|p]assword:'])
    print ret
    if ret==0:
        print '[-] Error Connecting'
        return
    if ret==1:
        child.sendline('yes')
        ret=child.expect([pexpect.TIMEOUT,'[P|p]assword:'])
        if ret==0:
            print '[-] Error Connecting'
            return
        print child
        child.sendline(password)
        child.expect(PROMPT)
        return child
    if ret==2:
        child.sendline(password)
        child.expect(PROMPT)
        return child
def main():
    host='127.0.0.1'
    user='root'
    password='root'
    child=connect(user,host,password)
    send_command(child,'cat /etc/passwd |grep root')

if __name__=='__main__':
    main()

可在此基础上,编写基于ssh口令猜测的木马蠕虫程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值