windows与windows远程连接,windows和linux远程连接,linux和windows远程连接
目录
1 预研目的 1
1.1 背景 1
1.2 研究范围 1
1.3 研究意义 1
2 研究成果 2
2.1 已达成的目标或原型 2
2.2 成本与风险 2
3 研发过程 2
3.1 关键技术描述 3
3.2 技术开发指导 3
1. 代码展示(linux连接展示) 3
2. Linux文档传输代码 4
3. Windows连接代码 4
4. Windows传输代码 5
5. Winrm服务端的配置说明 6
6. Window远程文件传输界面展示 8
7. Linux远程文件传输界面展示 9
3.3 过程问题 9
4 参考资料 10
1 预研目的
主要任务是实现软件的远程自动安装,以及远程自动安装的实现。用到的技术主要是python相关库的调用,windows中相关环境的配置,服务器的配置等内容。
1.1 背景
目前,大多数一定规模的企业销售体系普遍存在着由公司总部、营销中心、仓库(配送中心)以及异地分支机构等多个部门的协同运作构成,而且这些部门通常不在一个区域,这种情况给企业实施基于整个公司的业务信息管理系统带来挑战,主要表现在:从管理的角度来说,企业要求不论使用管理软件的部门在什么地方,但其日常业务引起的数据信息变换应该及时反映在公司的数据库中。
国内外有关软件的远程自动安装机制,相关的资料还是比较少,但是机器的远程技术已经相当的成熟,想在众所周知的远程安装软件非常的多,比如机器自带的远程桌面连接、Telnet、SSH等,QQ通信软件上面带的远程连接,还有专门用于远程安装的软件teamviwer、向日葵等。关于远程软件的自动安装也有零零散散的技术,但是目前市场上面没有一个整合的、明确的软件。通过调研,了解到微软的公司内部,有关于windows系统的远程安装的技术,但是他们的技术是不开源的。而微软内部的这种技术也仅仅是为了方便自己的公司内部软件的自我管理。本公司调研的这项技术也恰恰和微软类似。和微软不相同的是,我们所要面对的不仅仅局限于windows系统,还有linux系统。所以这项技术最终的目标也是实现windows系统和linux系统上的远程软件自动安装技术。
1.2 研究范围
这项技术主要用到了计算机网络中的传输协议的研究。通过了解内部的底层原理,可以明确整个连接的过程以及如何进行文件传输的控制。自动安装技术主要用到的是镜像技术。通过把镜像看成是一个大的文档,然后通过远程进行文档的传输,当文档传输完成的时候,也就是软件安装成功的时候。Linux系统中的连接的协议主要的是SSH协议,windows系统中主要用到的技术是RDP协议。这两种协议都是分布在ISO协议的应用层中。整个传输的过程设计到iOS的七层模型,这项研究的重点是关注于应用层的协议。在python中可以通过调用相关的库来抓包,通过抓包分析,可以看到传输中用到的是什么协议。对于windows和linux系统,我所做的任务都是分为了两步,第一步是进行远程连接,第二部是进行文件的无损传输。
1.3 研究意义
这项技术的研究意义是为了方便公司的内部管理人员进行公司中电脑资源的批量管理和系统的资源配置,这同时也节省了工作人员进行繁琐的软件安装以及更新的操作过程。这向技术的特性是可以实现windows和linux系统上面的软件的自动安装。这项技术是项目组的一个子项目,其主要用于辅助管理人员进行资源的管理。行业标准是实现文件的安全传输的情况下,保障其完整性以及可用性。商业价值可以在任何公司进行公司的内部的资源的管理,以及文件的下发和信息的通知等内容,省去了工作人员无聊的下载安装工作。
2 研究成果
目前的研究成果:实现了linux远程连接以及文件的无损传输。Windows远程连接和文件的无损传输。
2.1 已达成的目标或原型
实现了远程的windows系统的连接和linux系统的连接,以及windows远程文件传输,和linux系统的远程文件传输。
2.2 成本与风险
此技术需要用到计网相关的知识的学习,调研的时间为一周,开发的时间需要一周,进行细节的调研和实现需要一周,总共三周的工作。实现了远程连接和文件的远程传输。
这项技术不足之处分为两点:第一个就是软件的自动安装,需要进行写一个脚本进行控制自动从网上下载相关的内容,但是这个脚本相当于一个.exe可执行文件,但是这个还没有实现,暂时是想到了将软件映射成为镜像然后进行远程的传输工作。第二个难点就是进行文件的完整传输,这个在linux系统中文件的远程实现了完整传输,但是windows中没有相关内容的调研,所以只是实现了基本的文本传输,以及有限定的文件内容的传输。相关的内容还需要进行进一步的实现。在windows中如果想要进行文件的完整传输,可以先将文件转换为二进制文件,然后再进行文件流的流入工作。还用就是软件进行镜像映射,然后需要将这个镜像再映射成为二进制文件流进行读入。
Linux远程传输中进行完整镜像的传输还没有实现
Windows中进行完整文件的传输还需要进一步的实现,这个现阶段实现了传送文件,但是还不是完整性的传输,传输的过程中还需要考虑到编码方面的知识点。
3 研发过程
整个的研发过程分为:调研阶段、环境配置阶段、原型输出阶段、开发阶段、总结阶段。在第三部分,主要讲的是关于研发过程中,环境的配置以及开发阶段。其次是总结阶段。因为开发周期比较短,所以初步形成了开发的原型。
3.1 关键技术描述
用到的变成语言是python,开发环境是python2.7。用到的库是winrm和paramiko。这两个里面含有封装好的远程连接。Linux的通信协议是基于SSH的,windows的连接协议是基于RDP的。在windows中的连接还需要用到windows中自带的winrm服务端。需要服务端的配置。配置好服务端之后需要进行开启服务端。
3.2 技术开发指导
这节主要是具体预研过程,开发过程,环境搭建,编码,调试等过程。
首先需要进行调研,在连接的过程中需要用到什么技术。这方面在网上的资料比较的少,需要进行FQ搜索,然后就是确定了所用到的技术之后,就需要进行调试工作了。首先是安装python,这里安装的python的版本也需要有一定的规则,有的太低或者太高的版本中对于库的支持的情况也是不同的。Linux中用到的系统是centos2.7。Windows 中用到的系统是win7和win10这两个系统。在进行win10的连接的过程中需要进行winrm的服务端的信息的配置。
- 代码展示(linux中连接展示)
# -*- coding: utf-8 -* # 测试过程中,比较常用的操作就是将DUT(待测物)接入网络中,然后远程操控对DUT, # 使用SSH远程登陆到主机,然后执行相应的command即可 # python 代码如下: # paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接 # 首先第一步我们需要安装paramiko这个包 # 安装命令:pip install paramiko # 导入paramiko包 import paramiko s = paramiko.SSHClient() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机 s.connect("10.65.5.94",22,"dell", "nsfocussyh") execmd = 'ls' #需要输入的命令 stdin, stdout, stderr = s.exec_command (execmd) print(stdout.read()) s.close() #结果 #b'/home/usra\n'
这部分的代码在运行的时候需要步骤
1)先安装好python(相关的环境变量的配置方面自己可以进行网上动手进行搜索,这方面的内容比比皆是)
2)然后再安装好python中的pip(有的python中自带pip,有的没有,如果没有的话需要进行自己安装)
3)通过pip再安装paramiko模块,这个模块主要是用来进行linux的连接用的。
4)至此就可以进行linux的连接了。
连接需要的准备信息工作
1)Linux系统所在ip地址
2)Linux系统的用户名
3)Linux系统的用户名密码
所有的环境变量配置好了之后就可以进行上述的代码的运行操作。上述代码可以进行完整的运行,前提是需要自己将自己的环境都配置正确了,然后自己远程的linux系统的ip输入正确,以及用户名和用户密码也要输入正确,这样才可以进行远程的连接。由于使用的是python这样的跨平台的运行语言,所以所有支持python平台的如Linux,Solaris,BSD,MacOSX,Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳的工具之一。当然paramiko只支持对linux系统的远程,因为paramiko是用python语言写的一个模块,遵循SSH协议,支持加密和认证的方式和,进行远程服务器的连接。通过连通之后,我们可以进行在自己的控制台可以进行输入linux的相关的命令,然后对linux系统进行一系列的操作。合法的linux命令都是支持的,cd、pwd、mv xxx、ps -ef|grep tomcat等等均可执行。
- Linux文档传输代码
# -*- coding: utf-8 -*- import paramiko transport = paramiko.Transport(('10.65.150.53', 22)) transport.connect(username='root', password='nsf0cus123') sftp = paramiko.SFTPClient.from_transport(transport) # 将location.py 上传至服务器 /tmp/test.py '/tmp/test_from_win' sftp.put('/Users/dell/PycharmProjects/restful/s.jpg', "/syh/desert.jpg") # 将remove_path 下载到本地 local_path # sftp.get('/Users/dell/PycharmProjects/restful/s2.jpg', '/desert.jpg') transport.close()
这部分的代码主要是用来远程的文件传输所用,这里用到了paramiko中的Transport子模块内容。然后用到了sftp协议。通过上述的代码可以将运行本段代码的系统中的文件进行远程传输到自己输入ip地址中的linux电脑中。
- Windows连接代码
import winrm import sys host = "192.168.2.131" username = "BlackSwan" passwd = "wbrs" #start the connection session s = winrm.Session('http://' + host + ':5985/wsman' , auth=(username, passwd)) def _runCommand(comn): if(comn == 'q'): sys.exit() r = s.run_cmd(comn) print r.std_out while 1: # comn = raw_input("echo jintianwohaokaixinya >>a.txxt") raw= raw_input("raw_input: ") print raw comn = "echo "+raw+ " >>a.txt" _runCommand( comn )
这部分的代码主要是用于windows远程连接的代码,这个代码对于win7和win10都是适用的。这部分的代码需要进行安装pywinrm模块。安装好了之后连接需要的准备信息工作
1)windows系统所在ip地
2)windows系统的用户名
3)windows系统的用户名密码
- Windows传输代码
import winrm import sys import io import argparse # define the target host host = "192.168.2.131" username = "BlackSwan" passwd = "wbrs" # start the connection session s = winrm.Session('http://' + host + ':5985/wsman', auth=(username, passwd)) # input the command to be run def _runCommand(comn): if (comn == 'q'): sys.exit() s.run_cmd(comn) if __name__ == '__main__': f_name = 'f_test.txt' old_str = 'wo' new_str = 'haha' f = io.open(f_name, "r", encoding='utf8')
for line in f:
line =f.read(10)
# comn = "echo " + line + ">>a.txt"+"\n"
comn = "echo " + line + ">>a.txt"+"\n"
_runCommand(comn)
f.close()
# comn = raw_input("echo jintianwohaokaixinya >>a.txxt")
这部分的代码是关于文件的传输,这里面用到的技术主要是先进行windows的远程的连接,远程的连接用到的也是winrm这个模块,通过连接可以进行远程连接的windows系统的cmd操作,在cmd中可以进行文件的操作,主要是关于文件的创建以及文件中数据的录入工作。通过python中的io控制流可以进行文件的读取操作。将文件中的数据读出来然后通过echo通过远程系统的cmd窗口进行创建文件,然后进行数据的录入。
- Winrm服务端的配置说明
1) winrm service 默认都是未启用的状态,先查看状态;如返回信息,则是没有启动;在需要远程的windows系统中的dos命令窗口进行输入如下命令
winrm enumerate winrm/config/listener
输入之后,我的主机上面的dos窗口中显示如图5.1所示:(这里需要注意在运行dos命令窗口的时候需要提供管理员的权限,不然运行不了)
图5.1
2) 针对winrm service 进行基础配置:
执行命令
Winrm quickconfig
运行之后显示如图5.2
图5.2
3) 查看winrm service listener
执行命令
winrm e winrm/config/listener
运行之后如图5.3
图5.3
4) 为winrm service配置auth:
执行命令
winrm set winrm/config/service/auth @{Basic="true"}
运行之后如图5.4
图5.4
5) 为winrm service配置加密方式为允许非加密:
执行命令
winrm set winrm/config/service @{AllowUnencrypted="true"}
运行之后显示如图5.5
图5.5
- windows远程文件传输的界面图如图6.1
图6.1
- Linux远程连接的界面展示如图7.1,Linux中远程文件传输的界面展示如图7.2
图7.1
图7.2
3.3 过程问题
遇到的问题:首先是明确需求,调研的时候要找到痛点。在开发的时候需要找准自己方向。在进行远程连接的时候,首先找有没有一个通用的工具,既可以实现windows、还可以实现linux连接,但是通过查找发现没有相关的资料以及文献。然后将linux远程和windows远程进行分开操作,然后发现分开操作是可行的。远程连接实现之后,还要实现文件的完整传输。在linux中有集成好的文件可以供自己来操作,直接通过调用paramiko中的方法,就可以实现linux的远程连接以及文件的完整传输。同时还有一个问题就是paramiko只支持SSH2协议。这个问题目前没有解决。在windows中实现连接之后,可以实现文件的完整传输,这个在winrm中没有相关的操作。所以只有通过操作远程连接电脑中的dos窗口,然后进行完成相关的文件的创建以及文件的数据的读取。这个在读取的时候,需要了解自己的文件的结构,不然在读取文件的时候,原来读取的可能会被自己现有读取的文件进行覆盖掉。这个也是一个先存在的问题。
4 参考资料
下面的资料主要是关于搜索的主要的资料的一些连接,参考书目,建议阅读
1)[转]远程桌面连接原理 - blacet的学习点滴 - CSDN博客
2)解析三种Windows操作系统远程控制的实现(3)__科技时代_新浪网
3)局域网域控制器的域名与互联网上的域名是什么关系? 有什么区别?_百度知道
4)利用pywinrm,远程管理windows server-百度经验
5)为windows开启winrm service, 以便进行远程管理-百度经验
7)用python远程连接windows服务器并上传数据 - qq_37768140的博客 - CSDN博客
12)win7的远程的实现
13)windows上开启winrm服务 - Arckal的博客 - CSDN博客
15)wmi比较全的简介
17)远程桌面协议_百度百科