Paramiko:

  paramiko模块,基于SSH用于连接远程服务器并执行相关操作。

  SSHClient:

    用于连接远程服务器并执行基本命令

  SFTPClient:

    用于连接远程服务器并执行上传下载

以下该脚本可以实现:上传文件、下载文件、执行命令

 #!/usr/bin/env python
#定义函数
import paramiko
import os
import datetime
import sys
import re
#定义基础命令格式
def perform_command(hostname, port, username, password, comm):
try:
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
try:
print "\033[33mIP:\033[0m", hostname
print "\033[33mPerform command:\033[0m", comm
print '\033[32m###########################################################\033[0m'
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(comm)
print stdout.read()
print '\033[32m###########################################################\033[0m'
print '\033[32mScript perform success %s \033[0m' % datetime.datetime.now()
s.close()
except Exception:
print "\033[31mERROR - Perform error\033[0m"
except Exception:
print "\033[31mERROR - Connect error! IP: %s!\033[0m" % hostname #定义发送文件格式
def send_file(hostname,port,username,password,local_dir,client_dir,file):
try:
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
try:
print "\033[33mIP:\033[0m", hostname
print "\033[33mSend file:\033[0m", file
print "\033[33mClient_dir:\033[0m", client_dir
sftp=paramiko.SFTPClient.from_transport(t)
sftp.put(os.path.join(local_dir,file),os.path.join(client_dir,file))
t.close()
print '\033[32mScript perform success %s \033[0m' % datetime.datetime.now()
except Exception:
print "\033[31mERROR - Perform error\033[0m"
except Exception:
print "\033[31mERROR - Connect error! IP: %s!\033[0m" % hostname
#定义下载文件格式
def get_file(hostname,port,username,password,local_dir,client_dir,file):
try:
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
try:
print "\033[33mIP:\033[0m", hostname
print "\033[33mGet file:\033[0m", file
print "\033[33mClient_dir:\033[0m", client_dir
sftp=paramiko.SFTPClient.from_transport(t)
sftp.get(os.path.join(client_dir,file),os.path.join(local_dir,file))
t.close()
print '\033[32mScript perform success %s \033[0m' % datetime.datetime.now()
except Exception:
print "\033[31mERROR - Perform error\033[0m"
except Exception:
print "\033[31mERROR - Connect error! IP: %s!\033[0m" % hostname
#定义帮助文件
def help():
print """
\033[33mHelp: Welcome to use python script, this script can help you run commands, send files and get files. Use this script, you can running for one host or a host group, and you know get file can't for a host group. Give you examples: If you want perform command:
Usage: (for one host) ./paramiko-upload.py -H [hostip] -c [command]
Example: ./paramiko-upload.py -H 10.100.139.245 -c 'ls -al' Usage: (for a host group) ./paramiko-upload.py -F [ip.txt] -c [command]
Example: ./paramiko-upload.py -F 'ip.txt' -c 'ls -al' If you want send file: Usage: (for one host) ./paramiko-upload.py -H [hostip] -s [local_dir] [client_dir] [file]
Example: ./paramiko-upload.py -H 10.100.139.245 -s '/opt/Felix' '/tmp' ip.txt Usage: (for a host group) ./paramiko-upload.py -F [ip.txt] -s [local_dir] [client_dir] [file]
Example: ./paramiko-upload.py -F ip.txt -s '/opt/Felix' '/tmp' ip.txt If you want get file:
Usage: (for one host) ./paramiko-upload.py -H [hostip] -g [local_dir] [client_dir] [file]
Example: ./paramiko-upload.py -H 10.100.139.245 -g '/opt/Felix' '/tmp' ip.txt ip.txt file content like this:
1.1.1.1
2.2.2.2\033[0m
"""
sys.exit() #定义命令详情 if __name__ == '__main__':
#定义账号、端口、密码等信息
username='root'
port=2222
password='abcdefg' if len(sys.argv) > 2:
if sys.argv[1] == '-H':
if len(sys.argv) == 5 and sys.argv[3] == '-c':
hostname=sys.argv[2]
comm = sys.argv[4]
perform_command(hostname, port, username, password, comm)
elif len(sys.argv) == 7 and sys.argv[3] == '-s':
hostname=sys.argv[2]
local_dir=sys.argv[4]
client_dir=sys.argv[5]
file=sys.argv[6]
send_file(hostname,port,username,password,local_dir,client_dir,file)
elif len(sys.argv) == 7 and sys.argv[3] == '-g':
hostname=sys.argv[2]
username='root'
port=2222
password='abcdefg' if len(sys.argv) > 2:
if sys.argv[1] == '-H':
if len(sys.argv) == 5 and sys.argv[3] == '-c':
hostname=sys.argv[2]
comm = sys.argv[4]
perform_command(hostname, port, username, password, comm)
elif len(sys.argv) == 7 and sys.argv[3] == '-s':
hostname=sys.argv[2]
local_dir=sys.argv[4]
client_dir=sys.argv[5]
file=sys.argv[6]
send_file(hostname,port,username,password,local_dir,client_dir,file)
elif len(sys.argv) == 7 and sys.argv[3] == '-g':
hostname=sys.argv[2]
local_dir=sys.argv[4]
client_dir=sys.argv[5]
file=sys.argv[6]
get_file(hostname,port,username,password,local_dir,client_dir,file)
else:
help()
elif sys.argv[1] == '-F':
ip_file=sys.argv[2]
file_stat=os.path.exists(ip_file)
if file_stat:
f=open(ip_file)
ips=f.readlines()
f.close()
for ip in ips:
ip = ip.strip('\n')
if re.match(r'^#', ip):
continue
if len(sys.argv) == 5 and sys.argv[3] == '-c':
hostname = ip
comm = sys.argv[4]
perform_command(hostname, port, username, password, comm)
elif len(sys.argv) == 7 and sys.argv[3] == '-s':
hostname=ip
local_dir=sys.argv[4]
client_dir=sys.argv[5]
file=sys.argv[6]
send_file(hostname,port,username,password,local_dir,client_dir,file)
else:
help()
else:
print "\033[31mERROR - Not found ip_file!\033[0m"
help()
else:
help()
else:
help()

【python】用python脚本Paramiko实现远程执行命令、下载、推送/上传文件功能的更多相关文章

  1. Python脚本控制的WebDriver 常用操作 <二十六> 上传文件

    测试用例场景 上传文件的方法是找到上传文件的对象,通常是的对象.然后直接往这个对象send_keys,传入需要上传文件的正确路径.绝对路径和相对路径都可以,但是上传的文件必须存在,否则会报错. Pyt ...

  2. “通过jumpserver远程登录linux服务器,rz上传文件速度过慢”问题的解决

    问题: windows通过jumpserver远程登录到linux服务器,使用rz上传jar包,速度太慢(10k以内). 解决方案: 思路:通过ssh直接登录远程服务器 1.secureCRT-> ...

  3. paramiko多线程远程执行命令

    import paramiko import sys import getpass import threading import os def rcmd(host=None, port=22, us ...

  4. Ajax+Python flask实现上传文件功能

    HTML: <div > <input type="file" name="FileUpload" id="FileUpload&q ...

  5. python day 14: 作业:开发一个能够多用户上传文件的FTP脚本

    目录 python day 14 1. 要求 2. 自己写的程序目录 3. models模块 4. settings模块 5. tcp_server模块 6. client模块 7. 后记 pytho ...

  6. SSH远程执行命令环境变量问题

    SSH命令格式 usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address: ...

  7. Python学习总结 06 paramiko 远程执行命令

    有时会需要在远程的机器上执行一个命令,并获得其返回结果.对于这种情况,python 可以很容易的实现. 1 工具 Python paramiko 1) Paramiko模块安装 在Linux的Term ...

  8. python之paramiko 远程执行命令

    有时会需要在远程的机器上执行一个命令,并获得其返回结果.对于这种情况,python 可以很容易的实现. 1 .工具 Python paramiko 1) Paramiko模块安装 在Linux的Ter ...

  9. Python 模块功能paramiko SSH 远程执行及远程下载

    模块 paramiko paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现 ...

随机推荐

  1. 爬虫:网页里元素的xpath结构,scrapy不一定就找的到

    这种情况原因是html界面关联的js文件可能会动态修改DOM结构,这样浏览器完成了动态修改DOM,在 浏览器上看到的DOM结构,就和后台抓到的DOM结构不通 举例:新浪微博发的微博,在浏览器通过fir ...

  2. 探秘 flex 上下文中神奇的自动 margin

    为了引出本文的主题,先看看这个问题,最快水平垂直居中一个元素的方法是什么? 水平垂直居中也算是 CSS 领域最为常见的一个问题了,不同场景下的方法也各不相同,各有优劣.嗯,下面这种应该算是最便捷的了: ...

  3. angular - 启用form组件

    1.导入form组件 2.导出form组件 3.使用form组件

  4. es6 - 模板

    'use strict'; // es5 let name = 'mrs'; let qb = 20; function logs() { return 'goods!'; } let html = ...

  5. haproxy mod tcp配置 按hostname 来定向服务器

    需求 tcp 链接服务器, 服务器端根据不同的域名 定向到不同的内网服务器上: 参考资料 https://serverfault.com/questions/643131/proxying-tcp-b ...

  6. uboot移植rtc

    uboot中可能会有需求提供rtc的支持目的达到uboot启动也能够进行墙上时间的显示和后面推断.大部分rtc支持的一个必要条件就是已经有i2c的支持.由于非常多的rtc是i2c接口控制的.uboot ...

  7. STL源代码分析--第二级空间配置器

    本文解说SGI STL空间配置器的第二级配置器. 相比第一级配置器,第二级配置器多了一些机制,避免小额区块造成内存的碎片.不不过碎片的问题,配置时的额外负担也是一个大问题.由于区块越小,额外负担所占的 ...

  8. C#:用SqlBulkCopy来实现批量插入数据

    SqlBulkCopy是.net2.0的新特性,平时用的很少,但是其功能却是非常强大,对于批量插入数据性能非常优越 代码 /// /// bulk插入/// private void BulkInse ...

  9. eclipse右下角总显示自动下载xml和jar,如何关闭

    windows->preference->查找download-选择Models->右侧下方Enable auto-download去掉 2.Automatic Updates-&g ...

  10. Django之中间件-CSRF

    CSRF a.CSRF原理 post提交时需要提交csrf_token ,缺少则不通过 在form表单中加入: {% csrf_token %} b.无CSRF时存在隐患 防护其他人通过别的链接pos ...