开发扩展SSH的使用领域和功能 启动一个远程shell 从公网一台电脑登录内网任何一台电脑

摘要:
//ASessiononnlyacceptsonecalltoRun,Start,Shell,Output,//或CombinedOutput。err=会话。运行(“sshpass-p”pwd“sshuser@1.2.3.12“)ifer!=nil{log.Println(”session.Run“,err.Error())}//启动远程shell//https://tools.

// A Session only accepts one call to Run, Start, Shell, Output,
// or CombinedOutput.


err = session.Run("sshpass -p "pwd" ssh user@1.2.3.12")
if err != nil {
log.Println(" session.Run", err.Error())
}
//启动一个远程shell
//https://tools.ietf.org/html/rfc4254#page-13
//err = session.Shell()
//if err != nil {
// log.Fatalln(" session.Shell-err", err.Error())
//}


构建成exe,点击即进入shell

package main

import (
"golang.org/x/crypto/ssh"
"log"
"os"
"time"
)

/**
golang版本的SSH客户端
SSH协议RFC文档
https://tools.ietf.org/html/rfc4254

一个ssh连接可以打开多个会话session
linux tty和pty区别
开机后登录系统的终端称为tty
远程登录的终端称为pty
pts是pty的实现方式
w命令可以显示当前系统登录的终端列表
针对交互式会话的操作
1.请求伪终端 pty-req
2.X11转发 x11-req
3.X11通道 x11
4.环境变量 env
5.启动shell或命令 shell/exec/subsystem

默认不支持上下键和tab键,还不支持clear清屏指令
通过VT100终端支持tab和clear指令
VT100终端包括一些控制符,可以在终端中显示不同颜色,支持光标控制,清屏指令等
http://www.termsys.demon.co.uk/vtansi.htm
*/
func main() {
sshConfig := &ssh.ClientConfig{
User: "u",
Auth: []ssh.AuthMethod{
ssh.Password("p"),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
ClientVersion: "",
Timeout: 10 * time.Second,
}
//建立与SSH服务器的连接
sshClient, err := ssh.Dial("tcp", "1.2.3.4:22", sshConfig)
if err != nil {
log.Fatalln("sshClient, err", err.Error())
}
defer sshClient.Close()
log.Println("sessionId: ", sshClient.SessionID())
log.Println("user: ", sshClient.User())
log.Println("ssh server version: ", string(sshClient.ServerVersion()))
log.Println("ssh client version: ", string(sshClient.ClientVersion()))

//打开交互式会话(A session is a remote execution of a program.)
//https://tools.ietf.org/html/rfc4254#page-10
session, err := sshClient.NewSession()
if err != nil {
log.Fatalln("Failed to create ssh session", err)
}

defer session.Close()

modes := ssh.TerminalModes{
ssh.ECHO: 1, //打开回显
ssh.TTY_OP_ISPEED: 14400, //输入速率 14.4kbaud
ssh.TTY_OP_OSPEED: 14400, //输出速率 14.4kbaud
ssh.VSTATUS: 1,
}

//使用VT100终端来实现tab键提示,上下键查看历史命令,clear键清屏等操作
//VT100 start
//windows下不支持VT100
//fd := int(os.Stdin.Fd())
//oldState, err := terminal.MakeRaw(fd)
//if err != nil {
// log.Fatalln("terminal.MakeRaw",err.Error())
//}
//defer terminal.Restore(fd, oldState)
////VT100 end

termWidth, termHeight := 100, 100

session.Stdin = os.Stdin
session.Stdout = os.Stdout
session.Stderr = os.Stderr

//打开伪终端
//https://tools.ietf.org/html/rfc4254#page-11
err = session.RequestPty("xterm", termHeight, termWidth, modes)
if err != nil {
log.Fatalln("RequestPty-err", err.Error())
}

//启动一个远程shell
//https://tools.ietf.org/html/rfc4254#page-13
err = session.Shell()
if err != nil {
log.Fatalln(" session.Shell-err", err.Error())
}

//等待远程命令结束或远程shell退出
err = session.Wait()
if err != nil {
log.Fatalln("session.Wait-err", err.Error())
}
}

golang SSH客户端三件套 - 1远程连接 shell - 简书 https://www.jianshu.com/p/935a43a41e5e

Go进阶52:开发扩展SSH的使用领域和功能  https://mojotv.cn/golang/ssh-pty-im

免责声明:文章转载自《开发扩展SSH的使用领域和功能 启动一个远程shell 从公网一台电脑登录内网任何一台电脑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Asp.net Identity 2.0 作弊条Markdown温故知新(3):六个实用扩展语法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

shell编程_条件判断if

条件判断if 本章课程大纲 1.什么是if 2.为什么要使用if 3.if基础语法 - 单条件 - 双条件 -多条件 4.if在判断的过程中,需要表达式  1.基于文件进行判断  -d -f -s -e 三个需求 2.基于整数进行判断 重要!  -eq -ne -ge -gt -le -lt 3.基于字符进行判断   = != 4.基于正则进...

python中的subprocess.Popen() 执行shell命令

subprocess介绍 需要用到Python来执行shell脚本, 因此需要查看下subprocess模块文档。 根据官网文档描述:subprocess模块用于创建子进程, 这个模块用于替换旧版本中的一些模块, 如:os.system, os.spawn*, os.popen*, os.popen*, popen2.*, commands.*, subp...

mac 添加安卓设备的支持

1. 把android设备插到mac电脑上 2. 首先可以看一下之前在该mac电脑上有没有添加过这个 , 命令 : adb devices 如果显示出,下面字样,说明之前添加过了,下面就可以不用再看了。 List of devices attached 42f6940daa32bf91device 3. 添加android设备第一步:打开终端,输...

使用 CSS 媒体查询创建响应式网站

简介现今每天都有更多的手机和平板电脑问市。消费者能够拥有可想象到的各种规格和形状的设备,但是网站开发人员却面临一个挑战:如何使他们的网站在传统浏览器、手机和平板电脑浏览器上有很好的效果,如何在各种大小的屏幕上提供一流的用户体验,答案是:采用响应式设计。响应式设计可以随所显示的屏幕大小而改变。实现响应式设计的主要方法是使用 CSS 媒体查询。 在本文中,将探...

shell分享

shell脚本分享 一、介绍shell Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业...

21本计算机数学相关的免费电子书【转】

  计算机数学对于许多人来说可能是一个难以搞定的科目。在这里我们为大家提供了 21 本免费电子书来帮助大家更好的理解计算机数学。   1. 概率编程和黑客的贝叶斯方法   这本书是对贝叶斯推理的一个引导,着重于计算机理解方面,以数学观点为辅。这本书假定你事先即不了解贝叶斯推理也不了解概率编程的知识。   2. 图灵机时代的数学   Thomas Hales...