ssh-golang 实例

package main

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

func main()  {
	sshConfig := &ssh.ClientConfig{
		User: "root",
		Auth: []ssh.AuthMethod{
			ssh.Password("123456"),
		},
		HostKeyCallback: ssh.InsecureIgnoreHostKey(),
		ClientVersion: "",
		Timeout: 10*time.Second,
	}

	sshClient ,err := ssh.Dial("tcp","IP:22",sshConfig)
	if err != nil{
		log.Fatal(err)
	}
	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()))
	//create a new session
	session, err := sshClient.NewSession()
	if err != nil{
		log.Println("failed to generate ssh session:",err)
	}
	defer session.Close()

	modes := ssh.TerminalModes{
		ssh.ECHO: 1,
		ssh.TTY_OP_OSPEED: 14400,
		ssh.TTY_OP_ISPEED: 14400,
		ssh.VSTATUS: 1,
	}

	//fd := int(os.Stdin.Fd())    //stdin standard file write in...
	//oldState,err := terminal.MakeRaw(fd)
	//if err != nil{
	//	log.Fatalln(err.Error())
	//}
	//defer terminal.Restore(fd,oldState)
	//
	//termWidth , termHeight, err := terminal.GetSize(fd)

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

	err = session.RequestPty("xterm",32,180,modes)   //associate the pty with the session on the remote host
	if err != nil{
		log.Fatalln(err.Error())
	}

	err = session.Shell()
	if err != nil{
		log.Fatalln(err.Error())
	}
	err = session.Wait()
	if err != nil{
		log.Fatalln(err.Error())
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值