python运维实战--跨堡垒机连接二级服务器上传文件
python运维实战--跨堡垒机连接二级服务器上传文件
paramiko的有关概念和操作
- Welcome to Paramiko! — Paramiko documentation
这个python脚本能做什么
- 免密跨越堡垒机将客户端文件上传至目标机,使用前请做好公钥通信工作
- 本脚本使用比较灵活,可自由指定客户端待上传文件路径、堡垒机账户、堡垒机上临时文件存放路径、目标机ssh端口,目标机账户,目标机ip,目标机文件路径
说明⚠️:如遇到公钥通信设置失败,请参阅如下文档
- linux下免密认证登录失败原因总结
- ssh-copy-id使用及非默认22端口时报错
python代码如下:
#!/usr/bin/env python
# coding=utf-8from optparse import OptionParser
import paramiko
import os,sys,time"""
这个脚本的作用是实现堡垒机模式下,文件上传
"""parser = OptionParser()
parser.add_option('-j', '--jumperuser', dest='jumperuser', help='Company jumper machine account like wutengfei, ..')
parser.add_option('-u', '--username', dest='username', help='Target machine account like wutengfei, ..')
parser.add_option('-p', '--port', dest='port', help='Target machine port')
parser.add_option('-m', '--hostname', dest='hostname', help='Target machine ip address like 192.168.246.168')
parser.add_option('-l', '--localpath', dest='localpath', help="Client local file path like '/Users/test.py'")
parser.add_option('-d', '--destpath', dest='destpath', help="Jumper server file path like '/tmp/test.py'")
parser.add_option('-t', '--targetpath', dest='targetpath', help="remote server file path like '/tmp/test.py'")
(opts,args) = parser.parse_args()#定义跳板机信息
jumpername = "jumper.shuju.com" # 跳板机ip/域名
jumperport = 22 # 跳板机ssh端口
paramiko.util.log_to_file('syslogin.log')class JumperInfo(object):"""将文件从客户端上传至跳板机"""def __init__(self,username,localpath,destpath):self.username = str(username)self.localpath = str(localpath)self.destpath = str(destpath)def jumper_ftp(self,jumperuser,localpath,destpath):private_key = os.path.expandvars('$HOME/.ssh/id_rsa')private_key = paramiko.RSAKey.from_private_key_file(private_key)t = paramiko.Transport(('jumper.shuju.com', 22))t.connect(username=jumperuser, pkey=private_key)sftp = paramiko.SFTPClient.from_transport(t)sftp.put(localpath,destpath)sftp.close()passinfo='\'s password: 'class Jumper_put(JumperInfo):"""将跳板机上的文件上传至目标机"""def __init__(self,hostname,username,port,targetpath):self.hostname = str(hostname)self.username = str(username)self.port = str(port)self.targetpath = str(targetpath)def jumper_scp(self,jumperuser,destpath,username,hostname,targetpath,port):ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())privatekey = os.path.expandvars('$HOME/.ssh/id_rsa')key = paramiko.RSAKey.from_private_key_file(privatekey)ssh.connect(hostname='jumper.shuju.com', username=jumperuser, port=22, pkey=key)channel = ssh.invoke_shell()channel.settimeout(10)buff = ''resp = ''channel.send('scp ' + ' ' + '-P' + ' ' + port + ' ' + destpath + ' ' + username + '@' + hostname + ':' + targetpath + '\n')while not buff.endswith('$ '):resp = channel.recv(9999)if not resp.find(passinfo)==-1:print 'Error info: Authentication failed.'channel.close()ssh.close()sys.exit()buff += respprint buffchannel.close()ssh.close()def main():jumper_ssh = JumperInfo(username=opts.jumperuser,localpath=opts.localpath,destpath=opts.destpath)jumper_ssh.jumper_ftp(opts.jumperuser,opts.localpath,opts.destpath)target_ssh = Jumper_put(hostname=opts.hostname,username=opts.username,port=opts.port,targetpath=opts.targetpath)target_ssh.jumper_scp(opts.jumperuser,opts.destpath,opts.username,opts.hostname,opts.targetpath,opts.port)if __name__ == '__main__':if opts.jumperuser == None or opts.username == None or opts.hostname == None or opts.localpath == None or opts.destpath == None or opts.targetpath == None or opts.port == None:parser.print_help()exit(-1)main()
脚本执行情况
实战--上传客户端文件
python test.py -j wutengfei -u wutengfei -p 22 -m 192.168.246.168 -l /tmp/test.py -d /tmp/test.py -t /tmp
fei.tgz 100% 1658 3.1MB/s 00:00
代码帮助选项
python test.py -h
Usage: test.py [options]Options:-h, --help show this help message and exit-j JUMPERUSER, --jumperuser=JUMPERUSERCompany jumper machine account like wutengfei, ..-u USERNAME, --username=USERNAMETarget machine account like wutengfei, ..-p PORT, --port=PORT Target machine port-m HOSTNAME, --hostname=HOSTNAMETarget machine ip address like 192.168.246.168-l LOCALPATH, --localpath=LOCALPATHClient local file path like '/Users/test.py'-d DESTPATH, --destpath=DESTPATHJumper server file path like '/tmp/test.py'-t TARGETPATH, --targetpath=TARGETPATHremote server file path like '/tmp/test.py'
这个python脚本缺点
- 不能上传目录,但可以将目录进行打包,如上例实战那样
- 当然还有其它问题存在,以后会持续改进,不足之处请大家指正,谢谢~
这个python脚本下步优化
- 增加文件下载功能
- 增加传输目录功能
转载于:https://blog.51cto.com/wutengfei/2176738
python运维实战--跨堡垒机连接二级服务器上传文件相关推荐
- Java连接Linux服务器上传文件
背景: 项目中有需求要使用Java上传文件至服务器及执行某些shell脚本.通过查阅一些资料,反复测试了两套方案,各有优缺点,下面分别阐述一下. 实现方案一:SpringBoot + JSch + L ...
- FileZilla使用密钥文件连接linux服务器上传文件
1.点击左上角文件,选择站点管理 2.点击新站点 协议选择SFTP linux默认端口是22 腾讯云ubuntu系统默认账户名是ubuntu 选择密钥文件,如果找不到文件,记得选择一下文件后缀 ...
- 怎么通过堡垒机创建虚拟服务器,怎么通过堡垒机连接云服务器
怎么通过堡垒机连接云服务器 内容精选 换一换 通过Web浏览器登录资源,会话连接断开,提示网络连接异常,连接已断开,请重试(Code:T_1006).云堡垒机系统与资源服务器之间网络连接不稳定,导致连 ...
- 跳板机连接linux服务器,linux通过跳板机连接远程服务器并进行文件传输的方法...
linux通过跳板机连接远程服务器并进行文件传输的方法 最近在linux主机上部署环境时,遇到了很多问题,第一个就是通过跳板机远程连接服务器传输文件的问题. 看了很多网上的解决办法,大部分就是说用Se ...
- python向windows服务器上传文件(夹)
python向windows服务器上传文件(夹) 本人需求分析: 需要从本地将某个指定目录下的文件夹上传至服务器的某个指定目录下. 这次思路是采用python的 paramiko 库.paramiko ...
- ASP.NET跨服务器上传文件的相关解决方案
ASP.NET跨服务器上传文件的相关解决方案 参考文章: (1)ASP.NET跨服务器上传文件的相关解决方案 (2)https://www.cnblogs.com/zuowj/p/3999798.ht ...
- 跨服务器上传文件方式
跨服务器上传文件的方式有很多,其中一种是使用在中间服务器上使用临时文件的方式进行保存后再发送到另一个服务器上,实现文件上传. 问题点:中间保存临时文件,还需要不定时的进行文件清理,比较麻烦 直接进行文 ...
- 关于nutz跨服务器上传文件
关于nutz跨服务器上传文件 发布于 578天前 作者 yong9664 770 次浏览 复制 上一个帖子 下一个帖子 标签: 无 是这样的,项目在一台服务器,文件要存储到另外一台服务器. ...
- 跨服务器上传文件遇到405 or 409
跨服务器上传文件405 由于TOMCAT考虑到安全性,默认关闭了TOMCAT的PUT和DELETE请求(即readonly = true). 解决方法:修改Tomcat文件夹下的/conf/web.x ...
最新文章
- 结对编程-马尔科夫链作业成绩
- 码农也能有春天:一个人独立运营网站12年,赚到了5亿多美元!
- vim php代码规范
- 无刷新删除 Ajax,JQuery
- python简单代码input-Python简单程序的练习
- WPAD原理介绍暨故障排查:ISA2006系列之三
- [SpringSecurity]基本原理_过滤器链
- 基于Apache POI 从xlsx读出数据
- 并行执行,没用到过,写到这里免得搞忘
- 基于模板的文字识别结果结构化处理技术
- c语言通讯录打电话,求c语言编写的通讯录源代码
- c# 多线程 源码5
- 分裂的史莱姆(二进制)
- VMWare安装使用、Linux命令、Docker安装和Linux项目部署
- UWB_安信可NodeMCU-BU01的使用
- Android studio下载及安装方法
- 省钱兄(APP+H5+公众号+小程序)自营商城源码分销系统社区团购线上线下核销吃喝玩乐系统源码前端模板
- Win7系统中wmiprvse.exe占用CPU高如何解决
- 把自己从一个疯狂下载者变成一个真正的学习者
- 液晶面板价格继续下跌,大屏电视跌幅更大,小屏跌无可跌