import paramiko

from scp import SCPClient

class LinuxSSHSCP(object):

def __init__(self, ip, username, password, port=22):

self.ip = ip

self.username = username

self.password = password

self.port = port

self.ssh_client = None

self.scp_client = None

self.sftp_client = None

def ssh_connect(self):

print("ssh connect")

if self.ssh_client is None:

self.ssh_client = paramiko.SSHClient()

# set_missing_host_key_policy(paramiko.AutoAddPolicy()) 允许连接不在know_hosts文件中的主机

self.ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

self.ssh_client.connect(self.ip, self.port, self.username, self.password, timeout=10)

def ssh_disconnect(self):

print("ssh disconnect")

self.ssh_client.close()

self.ssh_client = None

def ssh_exec_command(self, command):

print("exec command on remote")

std_in, std_out, std_err = self.ssh_client.exec_command(command)

result = std_out.read().decode()

return result

def scp_connect(self):

print("scp connect")

if self.ssh_client is None:

print("ssh not connect, start connect ssh")

self.ssh_connect()

if self.scp_client is None:

self.scp_client = SCPClient(self.ssh_client.get_transport(), socket_timeout=15.0)

def scp_disconnect(self):

print("scp disconnect")

self.scp_client.close()

self.scp_client = None

def scp_copy_from_remote(self, local_path, remote_path):

print("start copy remote to local")

self.scp_client.get(remote_path, local_path, True)

def scp_copy_to_remote(self, local_path, remote_path):

print("start copy local to remote")

self.scp_client.put(local_path, remote_path, True)

def sftp_connect(self):

print("sftp connect")

if self.ssh_client is None:

self.ssh_connect()

self.sftp_client = self.ssh_client.open_sftp()

def sftp_copy_from_remote(self, local_path, remote_path):

print("sftp copy from remote")

self.sftp_client.get(remote_path, local_path)

def sftp_copy_to_remote(self, local_path, remote_path):

print("sftp copy to remote")

self.sftp_client.put(local_path, remote_path)

def sftp_disconnect(self):

print("sftp connect")

self.sftp_client.close()

self.sftp_client = None

if __name__ == "__main__":

# 使用scp远程拷贝 拷贝整个目录只要提供路径就可以

# s = LinuxSSHSCP("ip", "tester", "password", 22)

# s.ssh_connect()

# s.scp_connect()

# print(s.ssh_exec_command("ls /home/tester/ |grep test"))

# print(s.ssh_exec_command("touch /home/tester/scp_test.text"))

# s.scp_copy_from_remote("/home/test/demo/ssh_demo/", "/home/tester/scp_test.text")

# print(s.ssh_exec_command("ls /home/tester/ |grep test"))

# s.scp_copy_to_remote("/home/test/demo/ssh_demo/tester_password", "/home/tester/")

# print(s.ssh_exec_command("ls /home/tester/ |grep test"))

# s.scp_disconnect()

# s.ssh_disconnect()

# 使用sftp远程拷贝 拷贝整个目录需要先获取目录下所有的文件名字,然后依次拷贝

s = LinuxSSHSCP("ip", "tester", "password", 22)

s.ssh_connect()

s.sftp_connect()

print(s.ssh_exec_command("ls /home/tester/ |grep test"))

print(s.ssh_exec_command("touch /home/tester/scp_test.txt"))

s.sftp_copy_from_remote("/home/test/demo/ssh_demo/scp_test.txt", "/home/tester/scp_test.txt")

print(s.ssh_exec_command("ls /home/tester/ |grep test"))

s.sftp_copy_to_remote("/home/test/demo/ssh_demo/tester_password", "/home/tester/tester_password")

print(s.ssh_exec_command("ls /home/tester/ |grep test"))

s.sftp_disconnect()

s.ssh_disconnect()

files = open('/tmp/deploy.log','a')

try:

files.write('[%s]: %s \n' %(time.ctime(),info))

except IOError:

files.close()

files.close()

def cmds(self,host,comm):

try:

print comm

client = paramiko.Transport((host,int(self.port)))

client.connect(username=self.users,password=self.passwd)

chan = client.open_session()

chan.exec_command(comm)

chan.close()

except:

print 'host', host

print traceback.format_exc()

self.log(traceback.format_exc())

def sftps(self,host,files):

try:

lodir = '/opt/onfile'

rmdir = '/opt/onfile'

client = paramiko.Transport((host,int(self.port)))

client.connect(username=self.users,password=self.passwd)

sftp = paramiko.SFTPClient.from_transport(client)

sftp.put('%s/%s'%(lodir,files),'%s/%s'%(rmdir,files))

client.close()

except:

print traceback.format_exc()

self.log(traceback.format_exc())

def work(self,comm):

fp = open('/opt/online/ser_list.txt').readlines()

for s in fp:

host = s.strip()

self.cmds(host,comm)

def sftp(self,comm):

fp = open('/opt/online/ser_list.txt').readlines()

for s in fp:

host = s.strip()

self.sftps(host,files)

if __name__ == '__main__':

外汇返佣

sc = Remote()

func =  sys.argv[1]

files = sys.argv[2]

if func == 'sftp':

sc.sftp(files)

elif func == 'work':

sc.work(files)

Python远程执行命令和拷贝

使用paramiko库和scp库结合

import paramiko

from scp import SCPClient

class LinuxSSHSCP(object):

def __init__(self, ip, username, password, port=22):

self.ip = ip

self.username = username

self.password = password

self.port = port

self.ssh_client = None

self.scp_client = None

self.sftp_client = None

def ssh_connect(self):

print("ssh connect")

if self.ssh_client is None:

self.ssh_client = paramiko.SSHClient()

# set_missing_host_key_policy(paramiko.AutoAddPolicy()) 允许连接不在know_hosts文件中的主机

self.ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

self.ssh_client.connect(self.ip, self.port, self.username, self.password, timeout=10)

def ssh_disconnect(self):

print("ssh disconnect")

self.ssh_client.close()

self.ssh_client = None

def ssh_exec_command(self, command):

print("exec command on remote")

std_in, std_out, std_err = self.ssh_client.exec_command(command)

result = std_out.read().decode()

return result

def scp_connect(self):

print("scp connect")

if self.ssh_client is None:

print("ssh not connect, start connect ssh")

self.ssh_connect()

if self.scp_client is None:

self.scp_client = SCPClient(self.ssh_client.get_transport(), socket_timeout=15.0)

def scp_disconnect(self):

print("scp disconnect")

self.scp_client.close()

self.scp_client = None

def scp_copy_from_remote(self, local_path, remote_path):

print("start copy remote to local")

self.scp_client.get(remote_path, local_path, True)

def scp_copy_to_remote(self, local_path, remote_path):

print("start copy local to remote")

self.scp_client.put(local_path, remote_path, True)

def sftp_connect(self):

print("sftp connect")

if self.ssh_client is None:

self.ssh_connect()

self.sftp_client = self.ssh_client.open_sftp()

def sftp_copy_from_remote(self, local_path, remote_path):

print("sftp copy from remote")

self.sftp_client.get(remote_path, local_path)

def sftp_copy_to_remote(self, local_path, remote_path):

print("sftp copy to remote")

self.sftp_client.put(local_path, remote_path)

def sftp_disconnect(self):

print("sftp connect")

self.sftp_client.close()

self.sftp_client = None

if __name__ == "__main__":

# 使用scp远程拷贝 拷贝整个目录只要提供路径就可以

# s = LinuxSSHSCP("ip", "tester", "password", 22)

# s.ssh_connect()

# s.scp_connect()

# print(s.ssh_exec_command("ls /home/tester/ |grep test"))

# print(s.ssh_exec_command("touch /home/tester/scp_test.text"))

# s.scp_copy_from_remote("/home/test/demo/ssh_demo/", "/home/tester/scp_test.text")

# print(s.ssh_exec_command("ls /home/tester/ |grep test"))

# s.scp_copy_to_remote("/home/test/demo/ssh_demo/tester_password", "/home/tester/")

# print(s.ssh_exec_command("ls /home/tester/ |grep test"))

# s.scp_disconnect()

# s.ssh_disconnect()

# 使用sftp远程拷贝 拷贝整个目录需要先获取目录下所有的文件名字,然后依次拷贝

s = LinuxSSHSCP("ip", "tester", "password", 22)

s.ssh_connect()

s.sftp_connect()

print(s.ssh_exec_command("ls /home/tester/ |grep test"))

print(s.ssh_exec_command("touch /home/tester/scp_test.txt"))

s.sftp_copy_from_remote("/home/test/demo/ssh_demo/scp_test.txt", "/home/tester/scp_test.txt")

print(s.ssh_exec_command("ls /home/tester/ |grep test"))

s.sftp_copy_to_remote("/home/test/demo/ssh_demo/tester_password", "/home/tester/tester_password")

print(s.ssh_exec_command("ls /home/tester/ |grep test"))

s.sftp_disconnect()

s.ssh_disconnect()

#!/usr/bin/env python

#-*-coding:UTF-8-*-

"""

@Item   :  v1.0

@Author :  ShengWangQiang

@Group  :  System

@Date   :  2015-01-28

@E-mail :  swq.499809608@hotmail.com

@Funtion:

"""

import sys,time,os,traceback,commands,

import paramiko,

class Remote(object):

def __init__(self):

version = 'v0.1'

self.users = 'root'

self.passwd  = "1234567890"

self.port = 22

def log(self,info):

files = open('/tmp/deploy.log','a')

try:

files.write('[%s]: %s \n' %(time.ctime(),info))

except IOError:

files.close()

files.close()

def cmds(self,host,comm):

try:

print comm

client = paramiko.Transport((host,int(self.port)))

client.connect(username=self.users,password=self.passwd)

chan = client.open_session()

chan.exec_command(comm)

chan.close()

except:

print 'host', host

print traceback.format_exc()

self.log(traceback.format_exc())

def sftps(self,host,files):

try:

lodir = '/opt/onfile'

rmdir = '/opt/onfile'

client = paramiko.Transport((host,int(self.port)))

client.connect(username=self.users,password=self.passwd)

sftp = paramiko.SFTPClient.from_transport(client)

sftp.put('%s/%s'%(lodir,files),'%s/%s'%(rmdir,files))

client.close()

except:

print traceback.format_exc()

self.log(traceback.format_exc())

def work(self,comm):

fp = open('/opt/online/ser_list.txt').readlines()

for s in fp:

host = s.strip()

self.cmds(host,comm)

def sftp(self,comm):

fp = open('/opt/online/ser_list.txt').readlines()

for s in fp:

host = s.strip()

self.sftps(host,files)

if __name__ == '__main__':

sc = Remote()

func =  sys.argv[1]

files = sys.argv[2]

if func == 'sftp':

sc.sftp(files)

elif func == 'work':

sc.work(files)

Python执行和拷贝的更多相关文章

  1. 采用Psyco实现python执行速度提高到与编译语言一样的水平

    本文实例讲述了采用Psyco实现python执行速度提高到与编译语言一样的水平的方法,分享给大家供大家参考.具体实现方法如下: 一.安装Psyco很简单,它有两种安装方式,一种是源码方式,一种是二进制 ...

  2. Python执行系统命令的方法 os.system(),os.popen(),commands

    os.popen():用python执行shell的命令,并且返回了结果,括号中是写shell命令 Python执行系统命令的方法: https://my.oschina.net/renwofei42 ...

  3. python执行linux的shell命令

    python执行shell脚本常用的方法 import os val=os.system("shell语句")  >>> val=os.system(" ...

  4. python执行mysqldump命令

    本文简单讲述如何利用python执行一些sql语句,例如执行mysqldump命令,进行数据库备份,备份成sql文件 #!/usr/bin/python#导入os模块import os#导入时间模块i ...

  5. python执行shell获取硬件参数写入mysql

    最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...

  6. Python原理 -- 深浅拷贝

    python原理 -- 深浅拷贝 从数据类型说开去 str, num : 一次性创建, 不能被修改, 修改即是再创建. list,tuple,dict,set : 链表,当前元素记录, 下一个元素的位 ...

  7. python执行方式及变量

    .python执行方式 (1)交互式:调试方便,无法保存代码 (2)命令行方式:可以永久保存代码 (3)python执行阶段 先启动python解释器,解释器像文本编辑器一样将文件内容从硬盘读到内存, ...

  8. python中深浅拷贝

    python的复制,深拷贝和浅拷贝的区别   在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一 ...

  9. Mysql学习---使用Python执行存储过程

    使用Python执行存储过程 使用Python执行存储过程[2部分]: 1.执行存储过程,获取存储过程的结果集  2.将返回值设置给了  @_存储过程名_序号 = #!/usr/bin/env pyt ...

随机推荐

  1. GO富集分析 信号通路

    基因富集分析是分析基因表达信息的一种方法,富集是指将基因按照先验知识,也就是基因组注释信息进行分类. 信号通路是指能将细胞外的分子信号经细胞膜传入细胞内发挥效应的一系列酶促反应通路.这些细胞外的分子信 ...

  2. Junit单元测试之MockMvc

    在测试restful风格的接口时,springmvc为我们提供了MockMVC架构,使用起来也很方便. 下面写个笔记,便于以后使用时参考备用. 一 场景 1 . 提供一个restful风格的接口 im ...

  3. Servlet 第一天

    package com.servlet; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet. ...

  4. oracle中日期转换

    oracle中,日期转换函数有很多,常用命令如下: to_char()命令将时间戳转换为用户规定的日期格式,如: SELECT TO_CHAR(sysdate,'YYYY-MM-DD hh24:mi: ...

  5. 处理警告:编码 GBK 的不可映射字符

    怎么处理警告:编码 GBK 的不可映射字符:javac -encoding UTF-8 XX.java使用-encoding参数指明编码方式: 或者 用记事本打开文件,然后另存为,选择ANSI编码,覆 ...

  6. set实现数组去重后是对象,这里转化为数组

    ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如: let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3]; ...

  7. 在windows下用脚手架搭建vue环境

    做了几个月vue项目,最近两个项目使用脚手架搭建的,确实用脚手架搭建方便了许多,想想以前自己手配的时候,确实是... 1.在这之前我是默认你已经使用过vue的,也默认你已经安装了node.js 2.接 ...

  8. Asp.Net Core 第04局:依赖注入

    总目录 前言 本文介绍Asp.Net Core中默认的依赖注入(DI)模式. 环境 1.Visual Studio 2017 2.Asp.Net Core 2.2 开局 第一手:依赖注入说明 1.一个 ...

  9. WEUI官方样式小程序工具打开预览

    https://github.com/Tencent/weui-wxss 用微信web开发者工具打开dist目录(请注意,是dist目录,不是整个项目)

  10. 【html】 两栏对比网页,同时滚动

    有的时候需要左右对比环境,而且希望能同时滚动,如下这么拼接就可以了 <html> <head><meta http-equiv="content-type&qu ...