ubuntu如何远程ssh登录Windows环境并执行测试命令

news2024/12/23 16:47:09

ubuntu如何远程ssh登录Windows环境并执行测试命令

  • 1 paramiko模块简介
    • 1.1 安装paramiko
    • 1.2 paramiko基本用法
      • 1.2.1 创建SSHClient实例
      • 1.2.2 设置主机密钥策略
      • 1.2.3 连接SSH服务器
      • 1.2.4 执行命令
      • 1.2.5 关闭SSH连接
      • 1.2.6 异常处理
  • 2 windows的配置
    • 2.1 启动OpenSSH服务
    • 2.2 配置防火墙
  • 3 Ubuntu配置
    • 3.1 安装ssh客户端
    • 3.2 测试是否可以远程链接到Windows
  • 4 paramiko使用完整测试样例

在实际的开发中有时会遇到需要在ubuntu上远程登录Windows的电脑去执行一些比较特殊的命令。这个时候就需要使用python的paramiko模块,首先去远程登录,然后再去执行对应的cmd。

1 paramiko模块简介

paramiko是一个用于在Python中实现SSH(Secure Shell)协议的模块,它提供了客户端和服务器的功能,使得你能够在网络上安全地执行命令、传输文件等。

1.1 安装paramiko

你可以使用以下命令使用pip安装paramiko:

pip3 install paramiko

1.2 paramiko基本用法

1.2.1 创建SSHClient实例

import paramiko

ssh = paramiko.SSHClient()

1.2.2 设置主机密钥策略

在连接SSH服务器之前,建议设置主机密钥策略,以便验证远程主机的身份:

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

1.2.3 连接SSH服务器

ssh.connect(hostname='your_host', username='your_username', password='your_password')

1.2.4 执行命令

以cmd为echo "Connection test"来介绍

cmd = 'echo "Connection test"'
stdin, stdout, stderr = ssh.exec_command(cmd)

1.2.5 关闭SSH连接

ssh.close()

1.2.6 异常处理

import paramiko

try:
    # Your paramiko code here
    
    ssh.close()

except paramiko.AuthenticationException:
    print("Authentication failed, please verify your credentials")
except paramiko.SSHException as e:
    print(f"Unable to establish SSH connection: {e}")
except Exception as e:
    print(f"An error occurred: {e}")

2 windows的配置

要通过SSH连接到Windows电脑,你需要使用SSH客户端,并确保Windows电脑上已启用了OpenSSH服务。

2.1 启动OpenSSH服务

  • 打开服务管理器。你可以按Win + R打开运行对话框,然后输入services.msc并按Enter。
  • 在服务管理器中找到"OpenSSH SSH Server"服务,确保其状态为“已启动”,并将启动类型设置为“自动”。
    在这里插入图片描述

2.2 配置防火墙

  • 如果Windows防火墙启用,确保允许SSH流量。你可以在“控制面板”中的“系统和安全”下找到“Windows Defender 防火墙”,然后选择“允许应用通过防火墙”。
  • 在列表中找到“OpenSSH服务器”并确保其允许。

3 Ubuntu配置

3.1 安装ssh客户端

sudo apt-get update
sudo apt-get install openssh-client

3.2 测试是否可以远程链接到Windows

ssh username@your-windows-ip

4 paramiko使用完整测试样例

该测试用例首先使用echo "Connection test"的测试命令去测试远程链接是否确实建立。然后再去执行真是的测试命令,进入到Windows D盘的test目录,去获取test目录下的所有文件和目录,然后输出结果。

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

user = 'xxx'
remote_host = 'yyy'
passwd = 'zzz'
cmd = f'powershell.exe cd D:\\test; Get-ChildItem;'

try:
    ssh.connect(remote_host, username = user, password = passwd)
    print(user, '@', remote_host, ": connected successfully.")

    print(" =================== 1 ======================")
    # 执行一个简单的命令(例如:echo)来确认连接确实建立
    stdin, stdout, stderr = ssh.exec_command('echo "Connection test"')
    # 获取命令输出(如果有)
    output = stdout.read().decode('utf-8', errors='ignore').strip()
    error = stderr.read().decode('utf-8', errors='ignore').strip()

    print(" =================== 2 ======================")
    # 根据命令执行结果输出信息
    if output:
        print("Connection test succeeded:", output)
    if error:
        print("Connection test had errors:", error)

    print(" =================== 3 ======================")
    # 执行一个简单的命令(例如:echo)来确认连接确实建立
    stdin, stdout, stderr = ssh.exec_command(cmd)
    print(" =================== 3 - 1 ======================")

    # 获取命令输出(如果有)
    output = stdout.read().decode('ISO-8859-1', errors='ignore').strip()
    print(" =================== 3 - 2 ======================")
    error = stderr.read().decode('utf-8', errors='ignore').strip()
    print(" =================== 3 - 3 ======================")

    print(" =================== 4 ======================")
    # 根据命令执行结果输出信息
    if output:
        print("Connection test succeeded:", output)
    if error:
        print("Connection test had errors:", error)

    print(" =================== 5 ======================")
    # 关闭连接
    ssh.close()

except paramiko.AuthenticationException:
    print("Authentication failed, please verify your credentials")
except paramiko.SSHException as sshException:
    print("Unable to establish SSH connection: %s" % sshException)
except paramiko.BadHostKeyException as badHostKeyException:
    print("Unable to verify server's host key: %s" % badHostKeyException)
except Exception as e:
    print(e)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1305279.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt开发流程】之2D绘图1:概述及基本绘制与填充和渐变填充

概述 Qt的绘图系统可以使用相同的API在屏幕和打印设备上进行绘图,并且主要基于QPainter, QPaintDevice和QPaintEngine类。 QPainter用于执行绘图操作,QPaintDevice是一个二维空间的抽象,可以使用QPainter在其上绘制,QPaintEngine…

Android : XUI- SimpleImageBanner+BannerItem带标题的轮播图-简单应用

示例图: 1.导入XUI http://t.csdnimg.cn/qgGaN 2.MainActivity.java package com.example.viewpagerbanne;import android.os.Bundle; import android.view.View; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.xu…

vue项目中 CDN 是vue本身的依赖可以按需加载还是项目中所有的第三方库都可以按需加载?

这是我看到CDN简介时产生的问题 相信很多小伙伴会有 和我一样的疑问 在这里 我也统一回答一下 CDN(内容分发网络)是一种通过将数据分发到全球各个节点,以提供快速、可靠的内容传输的技术。在Vue项目中,CDN可以用于按需加载Vue本…

Linux--操作系统

1. 常见的操作系统 Windowsmac OSLinuxiOSAndroid 2. 操作系统的定义 操作系统直接运行在计算机上的系统软件, 它是控制硬件和支持软件运行的计算机程序。 3. 操作系统的作用 向下控制硬件向上支持软件的运行,具有承上启下的作用。 4.总结 操作系统…

Server check fail, please check server xxx.xxx.xxx.xxx,port 9848 is available

记录一次服务调用中的错误 背景:我使用了nacos2.x的版本,同时在同一台服务器的三个docker容器中部署了nacos1、2、3,并将它们连接到了同一个docker网络 错误:Server check fail, please check server xxx.xxx.xxx.xxx,port 9848 …

事件驱动架构 vs. RESTful架构:通信模式对比与选择

1. 通信风格 事件驱动架构(EDA) 是一种异步通信风格,组件之间通过产生和消费事件进行通信。 事件是表示系统中重大变化或事件的消息,并分发给感兴趣的组件。这种通信模型允许系统的不同部分之间进行解耦和动态交互。 组件充当事件…

MTK Android P Sensor架构(一)

需求场景: 本来如果只是给传感器写个驱动并提供能读取温湿度数据的节点,是一件比较轻松的事情,但是最近上层应用的同事要求我们按照安卓标准的流程来,这样他们就能通过注册一个服务直接读取传感器事件数据了。这样做的好处就是第…

从手工测试进阶中高级测试?如何突破职业瓶颈...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、手工测试如何进…

【教3妹学编程-算法题】需要添加的硬币的最小数量

3妹:2哥2哥,你有没有看到新闻, 有人中了2.2亿彩票大奖! 2哥 : 看到了,2.2亿啊, 一生一世也花不完。 3妹:为啥我就中不了呢,不开心呀不开心。 2哥 : 得了吧,你又不买彩票&…

Vue 双向绑定:让数据与视图互动的魔法!(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

人体关键点检测3:Android实现人体关键点检测(人体姿势估计)含源码 可实时检测

目录 1. 前言 2.人体关键点检测方法 (1)Top-Down(自上而下)方法 (2)Bottom-Up(自下而上)方法: 3.人体关键点检测模型训练 4.人体关键点检测模型Android部署 (1) 将Pytorch模型转换ONNX模型 (2) 将ONNX模型转换…

【JVM从入门到实战】(一) 字节码文件

一、什么是JVM JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。 JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 二、JVM的功能 解释和运行 对字节码文件中的指令,实时的解释成机器码,让计算机…

图论——二分图

图论——二分图 二分图通俗解释 有一个图,将顶点分成两类,边只存在不同类顶点之间,同类顶点之间设有边。称图 G 为二部图,或称二分图,也称欧图。 性质 二分图不含有奇数环图中没有奇数环,一定可以转换为二…

005、Softmax损失

之——softmax与交叉熵 杂谈 我们常用到softmax函数与交叉熵的结合作为损失函数以监督学习,这里做一个小小的总结。 正文 1.softmax的基本改进 所谓softmax就是在对接全连接层输出时候把输出概率归一化,最基础的就是这样: 效果就是这样&…

图文教程:stable-diffusion的基本使用教程 txt2img(多图)

之前我介绍了SD的安装过程,那么这篇将介绍怎么使用SD 使用模型 SD安装好之后,我们只有一个默认的模型。这个模型很难满足我们的绘图需求,那么有2种方法。 1是自己训练一个模型(有门槛)2是去网站上找一个别人练好的模…

算法通关村第四关—表达式问题(黄金)

表达式问题 一、计算器问题 计算器也是非常常见的问题,我们看一个中等问题。LeetCode227.给你一个字符串表达式s,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。  你可以假设给定的表达式总是有效的。所有中间结果将在[-231,231…

关于Anaconda的安装和环境部署(此章专为新手制定)

目录 Anaconda简介 一、软件下载(地址👇) 2:点击下载 3:版本选择: 4:Anaconda的安装包就下载完成了 2:恭喜你,看到这里已经完成安装了 三、部署环境 1&#xff1…

Vue 双向绑定:让数据与视图互动的魔法!(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Wireshark中的http协议包分析

Wireshark可以跟踪网络协议的通讯过程,本节通过http协议,在了解Wireshark使用的基础上,重温http协议的通讯过程。 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于 字节流…

FastAPI之响应模型

前言 响应模型我认为最主要的作用就是在自动化文档的显示时,可以直接给查看文档的小伙伴显示返回的数据格式。对于后端开发的伙伴来说,其编码的实际意义不大,但是为了可以不用再额外的提供文档,我们只需要添加一个 response_mod…