php 执行远程php 文件,python使用paramiko模块实现ssh远程登陆上传文件并执行

程序执行时需要读取两个文件command.txt和ipandpass.txt。格式如下:

代码如下:

command.txt:

ThreadNum:1

port:22

local_dir:hello_mkdir

remote_dir:hello_mkdir

alter_auth:chmod 755 hello_mkdir

exec_program:./hello_mkdir

ipandpass.txt:

ip username password

程序中的队列操作是修改的别的程序,写的确实不错。

该程序亦正亦邪,如果拿去做坏事,我先声明与我无关,我只是分享我的代码罢了。

希望有兴趣的同志们来讨论技术应用。

这其中用到了paramiko,队列,多线程,后续也会写一些这三个方面的东西。欢迎批评指正。

其实这个程序有些地方还有待优化。

代码如下:

#function:upload files through ssh protocal and excute the files

#lib:paramiko

#MyThread:init a thread to run the function

#ThreadPol:init a thread pool

#uploadAndExecu:upload file and excute

#readConf:read config file

#-*- coding = utf-8 -*-

import Queue

import sys

import threading

import paramiko

import socket

from threading import Thread

import time

class MyThread(Thread):

def __init__(self, workQueue, timeout=1):

Thread.__init__(self)

self.timeout = timeout

self.setDaemon(False)

self.workQueue = workQueue

self.start()

#print 'i am runnning ...'

def run(self):

emptyQueue = 0

while True:

try:

callable, username, password, ipAddress, port,comms = self.workQueue.get(timeout = self.timeout)

#print 'attacking :',ipAddress,username,password,threading.currentThread().getName(),' time : '

callable(username,password, ipAddress, port,comms)

except Queue.Empty:

print threading.currentThread().getName(),":queue is empty ; sleep 5 seconds\n"

emptyQueue += 1

#judge the queue,if it is empty or not.

time.sleep(5)

if emptyQueue == 5:

print threading.currentThread().getName(),'i quit,the queue is empty'

break

except Exception, error:

print error

class ThreadPool:

def __init__(self, num_of_threads=10):

self.workQueue = Queue.Queue()

self.threads = []

self.__createThreadPool(num_of_threads)

#create the threads pool

def __createThreadPool(self, num_of_threads):

for i in range(num_of_threads):

thread = MyThread(self.workQueue)

self.threads.append(thread)

def wait_for_complete(self):

#print len(self.threads)

while len(self.threads):

thread = self.threads.pop()

if thread.isAlive():

thread.join()

def add_job(self, callable, username, password, ipAddress, Port,comms):

self.workQueue.put((callable, username, password, ipAddress, Port,comms))

def uploadAndExecu(usernam,password,hostname,port,comm):

print usernam,password,hostname,port,comm

try:

t = paramiko.Transport((hostname,int(port)))

t.connect(username=username,password=password)

sftp=paramiko.SFTPClient.from_transport(t)

sftp.put(comm['local_dir'],comm['remote_dir'])

except Exception,e:

print 'upload files failed:',e

t.close()

finally:

t.close()

try:

ssh = paramiko.SSHClient()

ssh.load_system_host_keys()

ssh.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy())

ssh.connect(hostname, port=int(port), username=username, password=password)

ssh.exec_command(comm['alter_auth'])

ssh.exec_command(comm['exec_program'])

except Exception,e:

print 'chang file auth or execute the file failed:',e

ssh.close()

def readConf():

comm={}

try:

f = file('command.txt','r')

for l in f:

sp = l.split(':')

comm[sp[0]]=sp[1].strip('\n')

except Exception,e:

print 'open file command.txt failed:',e

f.close()

return comm

if __name__ == "__main__":

commandLine = readConf()

print commandLine

#prepare the ips

wm = ThreadPool(int(commandLine['ThreadNum']))

try:

ipFile = file('ipandpass.txt','r')

except:

print "[-] ip.txt Open file Failed!"

sys.exit(1)

for line in ipFile:

IpAdd,username,pwd = line.strip('\r\n').split(' ')

wm.add_job(uploadAndExecu,username,pwd,IpAdd,commandLine['port'],commandLine)

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值