python使用paramiko进行系统间通信遇到的坑

记录自己在实现过程中遇到的坑。

实现目的

1、要求windows和linux可以互相通信,并传输文件
2、要求window和windows可以互相通信,并传输文件

环境

1、本地:win10企业版x64 ,python:3.8.7

2、linux服务端:ubuntu20.04 x64

3、windows服务端:win10专业版 x64

windows连接linux系统失败问题

windows连接linux系统失败,出现以下错误
在这里插入图片描述

排查流程

1、查看linux上是否ssh服务,打开终端,输入ssh,看是否有该命令功能:
python使用paramiko进行系统间通信遇到的坑_第1张图片

2、如果没有的话进行安装,如果有进行下一步:

命令:sudo apt-get install openssh-server openssh-client

3、判断ssh配置文件里的端口是否为22:

命令:cat /etc/ssh/ssh_config

4、如果不是可以修改,如果是,查看端口22是否开通:

命令:netstat -ntl

python使用paramiko进行系统间通信遇到的坑_第2张图片
5、若开通后连接还是提示:TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败;
python使用paramiko进行系统间通信遇到的坑_第3张图片
6、可能是防火墙导致无法通信,查看防火墙是否关闭:

命令:sudo ufw status

7、可以看到防火墙是开始状态,关闭防火墙;

命令:sudo ufw disable

8、再进行连接即可连接成功。
设置重启系统防火墙服务不启动
1)查询服务自启动的列表

systemctl list-unit-files 

python使用paramiko进行系统间通信遇到的坑_第4张图片
2)关闭自启动服务

systemctl disable ufw.service 

在这里插入图片描述
3)再次查看服务自启动列表如下

python使用paramiko进行系统间通信遇到的坑_第5张图片
4)、重启系统验证,发现系统重启后防火墙还是关闭状态。

windows连接windows系统失败问题

为了保证代码的一致性,所以windows上也采用paramiko的方式进行连接。
windows连接Windows系统失败,出现以下错误:
python使用paramiko进行系统间通信遇到的坑_第6张图片

排查流程

确保ssh先能通信成功。
1、安装ssh(本地和服务端都要安装)

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

python使用paramiko进行系统间通信遇到的坑_第7张图片
2、安装后,通过命令(管理员权限)或服务中,都启动失败,提示“拒绝访问”;
python使用paramiko进行系统间通信遇到的坑_第8张图片
3、最后进入到OpenSSH官网下载了一个新版本(下载的是V8.6.0.0p1-Beta最新的版本),然后重复上面的安装步骤,则服务可以启动;
python使用paramiko进行系统间通信遇到的坑_第9张图片
如何设置为开机自启动
1)管理员权限启动终端,输入以下命令:

命令:sc config sshd start=auto

在这里插入图片描述
2)将ssh目录加入到环境变量中,重启终端,直接输入ssh就可以运行该服务。
python使用paramiko进行系统间通信遇到的坑_第10张图片
4、使用ssh连接,提示:

ssh: connect to host [server_ip] port 22: Connection timed out

在这里插入图片描述
5、怀疑防火墙导致的,便尝试关闭试试
1)查看防火墙状态

netsh advfirewall show allprofiles

2)如若防火墙状态开启,则关闭windows上防火墙

netsh advfirewall set allprofiles state off

3)重新启动系统后,Windows防火墙将不再处于活动状态;
如果要再次启用防火墙,请使用以下命令:

netsh advfirewall set allprofiles state on

4)或者不关闭防火墙将sshd添加入站规则,并开放22号端口

命令:netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22

6、关闭防火墙后,再次使用ssh连接提示以下错误

Connection reset by [server_ip] port 22

在这里插入图片描述
7、查看详细日志:ssh -vvv [用户名]@[server_ip]查看错误码:

send - WSASend() ERROR:10053, io:000001A133F02E60

python使用paramiko进行系统间通信遇到的坑_第11张图片
8、查了很多资料说让改MTU(网络上传送的最大数据包,单位是字节),使用ping -f -l [字节] ip地址也没有问题。
此时心态已经快崩溃了。。。
偶尔在GitHub上看到一篇和我问题相似文章;
在github上查到一个用户出现相同的问题,
9、尝试着将ssh的位置改一下;
将C:\Users\用户名(比如Administrator)\openssh\OpenSSH-Win64改为C:\Users\openssh\OpenSSH-Win64,然后将其加入到环境变量里,重新执行第一步操作安装启动sshd服务,再次相连发现成功了。。
(估计是这个ssh版本有问题

10、使用ssh连接时,SSH2_MSG_SERVICE_ACCEPT received成功后出现10054的错误:

debug3: recv - from CB ERROR:10054, io:000001C51411FD40

基本上是用户名写错了,可以在终端输入命令“net user”,可以查看自己系统的用户名。
python使用paramiko进行系统间通信遇到的坑_第12张图片
以上就是目前遇到的问题,整理一下,以防自己忘记。

最后的最后,来个小小的推荐

为了保护自己的代码,开始找一些工具,偶然搜到VirboxProtector工具,试用着发现还不错,所以推荐一下。

题外话

查询了很多家,貌似只有这一家支持对python脚本语言加密,听他们技术人员说这种直接对源码保护方式的安全性不是特别高,但是防小白还是可以的(虽然我自己也是小白)。其实我觉得有时候保护的目的不是为了安全性,比如我,更最主要的是不想直白的暴露自己的代码写的有多垃圾。。。

听他们技术人员说如果对安全性有要求的话,建议使用cython将源码文件转成pyd或so库,当成动态库以本地程序的方式保护,安全性会很高。
这个转换方式后再保护的方法,等我抽时间试试。。

你可能感兴趣的:(python,linux,ssh)