title: I01 物理隔离条件下Windows与Linux服务器的文件传输脚本author: Adolph Leecategories: 进阶tags:
paramiko打怪升级mathjax: false
背景
在工作环境中,为了网络与数据传输的安全性、保密性。服务器往往与办公室网络环境存在物理隔离条件,一般是通过专线进行文件传输与程序部署。且并不是每一台服务器都可以通过专线直接连通,(例如仅开放堡垒机端口或使用虚机的情况)。因此每一次上传或下载文件都需要经过sftp…sftp…一系列繁琐的操作,让文件在不同的机器间流转。为了简化这一步骤,在保证网络安全的情况下,帮助我能够方便的上传下载文件,就抽空编写了一个小脚本,简化文件传输的步骤。下面就简单说一下实现原理。
语言与框架
shellPythonPython paramiko库网络拓扑图
通常我需要将文件从PC上传至虚机或从虚机下载到PC
利用Python在window操作系统操作Linux
这里使用了Python的paramiko库需要注意的是paramiko不支持通过windows连接到linux以后再次连接到另一台linux主机。因此paramiko仅仅解决了我们的第一步从PC到堡垒机的问题。而后面的问题,则需要通过shell脚本去解决,至于选择使用shell而不是python的原因就是,我们不需要到每一台机器上去部署对应的python环境(如果使用python2则不受这个限制)关键点共有三个通过windows执行linux命令。windows及linux之间文件的上传及下载利用shell脚本ssh连接另一台主机之后完成比较复杂的操作在下面两个示例中,我们都是通过显式的连接方式去连接操作系统,而paramiko是支持通过密钥的方式进行连接。在实际应用中我采用的即为通过密钥连接,详细的使用方法,可以参阅官方文档。
通过windows执行linux命令
import paramiko as pmkhost = { "host":"***.***.***.***", "port":"****", "user":"****", "passwd":"********"}client = pmk.SSHClient()client.set_missing_host_key_policy(pmk.AutoAddPolicy())client.connect(hostname=host['host'], port=host['port'], username=host['user'], password=host['passwd'])cmd = 'sh /***/*****.sh'# 需要执行的语句stdin, stdout, stderr = client.exec_command(cmd) # 执行client.close()
通过windows上传或下载文件到linux
import paramiko as pmkhost = { "host":"***.***.***.***", "port":"****", "user":"****", "passwd":"********"}trans = pmk.Transport(sock=(host['host'], int(host['port'])))trans.connect(username=host['user'], password=host['passwd'])sftp = pmk.SFTPClient.from_transport(trans)sftp.put('shell/***.sh','/***/****/***.sh')sftp.close()
利用shell进行远程连接(适用复杂操作)
#!/bin/sh\nssh ***.***.***.*** -p**** > /dev/null 2>&1 << eeooffsh /***/****.shsh /***/****.shsh /***/****.shsh /***/****.shexiteeooff
利用shell进行远程连接(适用简单操作)
ssh ***.***.***.*** -p**** "sh /***/***/***.sh && df -Th"
结
总而言之,通过强大的python,经过小半天的折腾之后,也是成功完成了一键从本地PC到虚机的文件传输任务。并且支持一键初始化以及主机的可配置化。用起来感觉还不错,也算是解放了双手。有相同困扰的朋友可以试一试。
转载请注明出处
举报/反馈