文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python paramiko 执行命令

2023-01-31 01:31

关注

参考

http://wangwei007.blog.51cto.com/blog/68019/1058726

http://youzao.blog.51cto.com/3946111/1348903

在node1上想对node2执行命令,标准的答案

1.比较直观

#!/usr/bin/env python 

import paramiko   

hostname='192.168.0.102'  

username='root'  

password='abc'   

port=22     

paramiko.util.log_to_file('paramiko.log')          

s=paramiko.SSHClient()                 

s.set_missing_host_key_policy(paramiko.AutoAddPolicy())          

s.connect(hostname = hostname,port=port,username=username, password=password)          

stdin,stdout,stderr=s.exec_command('free;df -h')          

print stdout.read()

2.类的形式

#!/usr/bin/python

# coding=utf8

import paramiko,datetime,os,threading

#class run_cmd(threading.Thread):

class run_cmd():

      def __init__(self,hostname=None,password=None,username=None,port=None,echo_cmd=None):

          #threading.Thread.__init__(self)

          self.hostname=hostname

          self.password=password

          self.username=username

          self.port=port

          self.echo_cmd=echo_cmd

          #self.thread_stop=False

      def run(self):

          paramiko.util.log_to_file('paramiko.log')

          s=paramiko.SSHClient()

          s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

          s.connect(hostname = self.hostname,username=self.username, password=self.password)

          stdin,stdout,stderr=s.exec_command(self.echo_cmd)

          return stdout.read()

          s.close()

      def stop(self):

           self.thread_stop=True

 

if __name__=='__main__':

    f = file('/home/python/filelist1','r')

    port=22

    c = f.readlines()

    for x in c:

        hostname = x.split('::')[0]

        password = x.split('::')[1]

        username = x.split('::')[2]    

        remote = x.split('::')[4].strip('\n')

        echo_cmd='/bin/find  %s -maxdepth 1 -type d -mmin -1200' %(remote)

        #echo_cmd='free;df -h'

        cmd_thread=run_cmd(hostname,password,username,port,echo_cmd)

        result=cmd_thread.run()

        print result

    f.close()


如果运行有错误,请参考python 增量同步远程文件夹


2.Python 利用pexpect和paramiko模块进行远程服务器的监控

#!/usr/bin/python# encoding=utf-8# Filename: paramiko_test.pyimport datetimeimport threadingimport paramikodef sshCmd(ip, username, passwd, cmds):
    try:
        client = paramiko.SSHClient()
        client.load_system_host_keys()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
        client.connect(ip, 22, username, passwd, timeout=5)        for cmd in cmds:
            stdin, stdout, stderr = client.exec_command(cmd)
            lines = stdout.readlines()            # print out
            for line in lines:                print line,        print '%s\t 运行完毕\r\n' % (ip)    except Exception, e:        print '%s\t 运行失败,失败原因\r\n%s' % (ip, e)    finally:
        client.close()#上传文件def uploadFile(ip,username,passwd):
    try:
        t=paramiko.Transport((ip,22))
        t.connect(username=username,password=passwd)
        sftp=paramiko.SFTPClient.from_transport(t)
        remotepath='/root/main.py'
        localpath='/home/data/javawork/pythontest/src/main.py'
        sftp.put(localpath,remotepath)        print '上传文件成功'
    except Exception, e:        print '%s\t 运行失败,失败原因\r\n%s' % (ip, e)    finally:
        t.close()#下载文件def downloadFile(ip,username,passwd):
    try:
        t=paramiko.Transport((ip,22))
        t.connect(username=username,password=passwd)
        sftp=paramiko.SFTPClient.from_transport(t)
        remotepath='/root/storm-0.9.0.1.zip'
        localpath='/home/data/javawork/pythontest/storm.zip'
        sftp.get(remotepath,localpath)        print '下载文件成功'
    except Exception, e:        print '%s\t 运行失败,失败原因\r\n%s' % (ip, e)    finally:
        t.close()  

if __name__ == '__main__':    # 需要执行的命令列表
    cmds = ['ls /root', 'ifconfig']    # 需要进行远程监控的服务器列表
    servers = ['xxx.xxx.xxx.xxx']

    username = "root"
    passwd = "xxxxxx"
    threads = []    print "程序开始运行%s" % datetime.datetime.now()    # 每一台服务器创建一个线程处理
    for server in servers:
        th = threading.Thread(target=sshCmd, args=(server, username, passwd, cmds))
        th.start()
        threads.append(th)    # 等待线程运行完毕
    for th in threads:
        th.join()    print "程序结束运行%s" % datetime.datetime.now()    #测试文件的上传与下载
    uploadFile(servers[0],username,passwd)
    downloadFile(servers[0],username,passwd)


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯