交互式shell

package main

import (
"golang.org/x/crypto/ssh"
"log"
"os"
"fmt"
) func main() {
ce := func(err error, msg string) {
if err != nil {
log.Fatalf("%s error: %v", msg, err)
}
} client, err := ssh.Dial("tcp", "192.168.154.131:22", &ssh.ClientConfig{
User: "root",
Auth: []ssh.AuthMethod{ssh.Password("")},
})
if err !=nil{
fmt.Println("ERR")
} session, err := client.NewSession()
defer session.Close() session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Stdin = os.Stdin //下面的modes和RequestPty是为了防止出现交换机的时候错误
modes := ssh.TerminalModes{
ssh.ECHO: ,
ssh.TTY_OP_ISPEED: ,
ssh.TTY_OP_OSPEED: ,
}
err = session.RequestPty("xterm", , , modes) //这里的session.Shell可以执行多条命令,但是session.Run只支持执行单条命令
err = session.Shell()
ce(err, "start shell") err = session.Wait()
}

执行命令式

package main

import (
"golang.org/x/crypto/ssh"
"os"
"fmt"
"bytes"
) func main() {
client, err := ssh.Dial("tcp", "192.168.154.131:22", &ssh.ClientConfig{
User: "root",
Auth: []ssh.AuthMethod{ssh.Password("")},
})
if err !=nil{
fmt.Println("ssh Dial err",err)
}
session, err := client.NewSession()
defer session.Close()
var out bytes.Buffer
session.Stdout = &out
session.Stderr = os.Stderr
session.Stdin = os.Stdin //下面的modes和RequestPty是为了防止出现交换机的时候错误,还有就是按照格式输出
modes := ssh.TerminalModes{
ssh.ECHO: ,
ssh.TTY_OP_ISPEED: ,
ssh.TTY_OP_OSPEED: ,
}
err = session.RequestPty("xterm", , , modes)
err=session.Run("ls")
session.Run("ls")
fmt.Println("ls output:",out.String())
err = session.Wait()
}

操作shell两种方式的更多相关文章

  1. IOS文件操作的两种方式:NSFileManager操作和流操作

    1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...

  2. 实例讲解Springboot整合MongoDB进行CRUD操作的两种方式

    1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合Mon ...

  3. 在.net core中数据操作的两种方式(Db first && Code first)

    在开发过程中我们通常使用的是Db first这种模式,而在.net core 中推荐使用的却是 code first 反正我是很不习惯这种开发模式 于是就搜寻整个微软的官方文档,终于找到了有关.net ...

  4. flask操作mongo两种方式--ORM

    #manage.py #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 ...

  5. flask操作mongo两种方式--常规

    #manage.py #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 ...

  6. mybatis(二)执行CRUD操作的两种方式配置和注解

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  7. 基于aspectj实现AOP操作的两种方式——注解方式

  8. 基于aspectj实现AOP操作的两种方式——xml配置

    1. 要导入的 jar 包: 常用的aspectj表达式: 权限修饰符可以省略,以下表示:返回值类型为任意,com.chy.service包以及其子包下的.任意类的.参数任意的.任意方法 execut ...

  9. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

随机推荐

  1. 【BZOJ4318】OSU! 期望DP

    [BZOJ4318]OSU! Description osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1 ...

  2. 160617、使用espeak将文字转语音(TTS)

    http://www.eguidedog.net/cn/WebSpeech_cn.php 简单使用例子: <html> <head> <meta http-equiv=& ...

  3. Zabbix监控主动模式

    接上篇:Zabbix监控web,MySQL,TCP状态,Nginx 参考官方文档:https://www.zabbix.com/documentation/3.4/zh/manual zabbix默认 ...

  4. ERR_PTR,PTR_ERR还有IS_ERR函数详解

    内核中的函数常常返回指针,问题是如果出错,也希望能够通过返回的指针体现出来. 总体来说,如果内核返回一个指针,那么有三种情况:合法指针,NULL指针和非法指针. 1)合法指针:内核返回的指针一般是指向 ...

  5. Bootstrap插件架构 基于元素自定义属性的布局规则

    w HTML布局规则 Javascript实现步骤 插件调用方法

  6. 小程序 Expecting 'EOF','}',',',']', got INVALID

    修改了app.json中的东西,做了注释操作,报如下错误: 修改了好一阵,一直报错,原来是json文件中无法使用注释惹的祸,具体查看:官方文档

  7. HBase简介及集群安装

    一.Hbase概述 Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储. 当您需要对大数据进行随机,实时读/写访问时,请使用Apache HBase™.该项目的目标是托 ...

  8. Rooks---LightOj1005(排列组合)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1005 题意就是在一个n*n的方格中放k个棋子,每一行每一列都不能有两个棋子,问有多少种 ...

  9. String Problem --- hdu3374(kmp、字典序最大与最小)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题意很简单,输出的是最小字典序的编号,最小字典序个数,最大字典序编号,最大字典序个数. 可以想一 ...

  10. HTTP错误404.2-Not Found ,模块CgiModule,错误代码0x800704ec

    目录 问题案例 解决问题 问题案例 错误:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面. 解决问题 网上 ...