Python执行和拷贝
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执行和拷贝的更多相关文章
- 采用Psyco实现python执行速度提高到与编译语言一样的水平
本文实例讲述了采用Psyco实现python执行速度提高到与编译语言一样的水平的方法,分享给大家供大家参考.具体实现方法如下: 一.安装Psyco很简单,它有两种安装方式,一种是源码方式,一种是二进制 ...
- Python执行系统命令的方法 os.system(),os.popen(),commands
os.popen():用python执行shell的命令,并且返回了结果,括号中是写shell命令 Python执行系统命令的方法: https://my.oschina.net/renwofei42 ...
- python执行linux的shell命令
python执行shell脚本常用的方法 import os val=os.system("shell语句") >>> val=os.system(" ...
- python执行mysqldump命令
本文简单讲述如何利用python执行一些sql语句,例如执行mysqldump命令,进行数据库备份,备份成sql文件 #!/usr/bin/python#导入os模块import os#导入时间模块i ...
- python执行shell获取硬件参数写入mysql
最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...
- Python原理 -- 深浅拷贝
python原理 -- 深浅拷贝 从数据类型说开去 str, num : 一次性创建, 不能被修改, 修改即是再创建. list,tuple,dict,set : 链表,当前元素记录, 下一个元素的位 ...
- python执行方式及变量
.python执行方式 (1)交互式:调试方便,无法保存代码 (2)命令行方式:可以永久保存代码 (3)python执行阶段 先启动python解释器,解释器像文本编辑器一样将文件内容从硬盘读到内存, ...
- python中深浅拷贝
python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一 ...
- Mysql学习---使用Python执行存储过程
使用Python执行存储过程 使用Python执行存储过程[2部分]: 1.执行存储过程,获取存储过程的结果集 2.将返回值设置给了 @_存储过程名_序号 = #!/usr/bin/env pyt ...
随机推荐
- DC/DCT/DCG 差别和联系
在dc家族系列中,DC_V,DC_E为根本的DC(Design Compiler)对象,具有dc所具有的根本fearture,DC在synopys对象系列中地位,无足轻重,也是业界应用最普遍的综合对象 ...
- Ubuntu中可以卸载的软件(持续更新)
sudo apt-get -y --auto-remove purge unity unity-2d* sudo apt-get -y purge empathy sudo apt-get -y pu ...
- boost phoenix
In functional programming, functions are objects and can be processed like objects. With Boost.Phoen ...
- objc_setAssociatedObject 关联对象
使用场景:在分类中,不允许创建实例变量,这里就解决了此问题 参考: https://www.cnblogs.com/someonelikeyou/p/7162613.html 属性的实质:就是实例变量 ...
- 使用CSS在页面中嵌入字体
http://jingyan.baidu.com/article/3065b3b6e9b2d9becff8a4c1.html 首先感谢css9.net照抄原话: 字体使用是网页设计中不可或缺的一部分. ...
- window安装nodejs
nvm管理nodejs 原文: https://www.cnblogs.com/shimily/articles/7244058.html1.下载nvm(nodejs版本管理工具) https://g ...
- [CSP-S模拟测试]:attack(支配树+LCA+bitset)
题目传送门(内部题55) 输入格式 第一行,包含两个整数:$n,m,q$,表示敌军城市数.路数和情报数.接下来$m$行,每行包含两个整数:$u,v$,表示从$u$到$v$包含一条单向道路.接下来$q$ ...
- [CSP-S模拟测试]:party?(霍尔定理+最小割+树链剖分)
题目描述 $Treeland$国有$n$座城市,其中$1$号城市是首都,这些城市被一些单向高铁线路相连,对于城市$i\neq 1$,有一条线路从$i$到$p_i(p_i<i)$.每条线路都是一样 ...
- (转)VirtualBox下安装CentOS7系统
转:https://www.cnblogs.com/hihtml5/p/8217062.html 本文假定你已经知道如何安装VirtualBox虚拟机软件,并且已经安装好了. 首先我们需要准备好cen ...
- PHP运行出现Notice
问题: Notice:Notice是PHP 的提示而非报错,PHP本身不需要事先声明变量即可直接使用,但是对未声明变量会有提示.在网站正式开始运行时,会把提示关了的. 关闭PHP提示的方法: 搜索ph ...