zoukankan      html  css  js  c++  java
  • golang的ssh包

    git clone https://github.com/golang/crypto.git,复制到 golang.org/x/ 目录下。

    常常用来建立ssh连接发送一条命令,但有时需要模拟ssh客户端功能,即直接连接上远程主机一直操作:(http://www.zhihu.com/question/30368538/answer/47835043)

    package main
    
    import (
        "golang.org/x/crypto/ssh"
        "log"
        "os"
    )
    
    func main() {
        ce := func(err error, msg string) {
            if err != nil {
                log.Fatalf("%s error: %v", msg, err)
            }   
        }   
    
        client, err := ssh.Dial("tcp", "172.16.116.200:22", &ssh.ClientConfig{
            User: "root",
            Auth: []ssh.AuthMethod{ssh.Password("^Two^Ten=1024$")},
        })  
        ce(err, "dial")
    
        session, err := client.NewSession()
        ce(err, "new session")
        defer session.Close()
    
        session.Stdout = os.Stdout
        session.Stderr = os.Stderr
        session.Stdin = os.Stdin
    
        modes := ssh.TerminalModes{
            ssh.ECHO:          0,  
            ssh.TTY_OP_ISPEED: 14400,
            ssh.TTY_OP_OSPEED: 14400,
        }   
        err = session.RequestPty("xterm", 25, 80, modes)
        ce(err, "request pty")
    
        err = session.Shell()
        ce(err, "start shell")
    
        err = session.Wait()
        ce(err, "return")
    }

      实际使用中有缺陷,通过 tab 补全时并不能正确显示。还是直接使用shell编写吧,简单实用:

    #!/usr/bin/expect 
    set timeout 30
    spawn ssh root@122.116.16.200
    expect "password:"
    send "123456
    "
    interact
  • 相关阅读:
    转载-如何高效的学习技术
    Lc176-第二高的薪水
    Lc4-寻找两个有序数组的中位数
    Lc175-组合两个表
    Lc3-无重复字符的最长子串
    Lc2-俩数相加
    Lc1- 两数之和
    jpa-子查詢
    20191225页面样式
    leetcode二刷结束
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/5355756.html
Copyright © 2011-2022 走看看