}
return session, nil
}
连接的方法很简单,只要提供登录主机的 用户*,*密码*, *主机名或者IP*,*SSH端口
执行,命令获取结果
连接成功后,执行命令很简单
import (
"fmt"
"log"
"os"
"time"
"golang.org/x/crypto/ssh"
)
func main() {
session, err := connect("root", "xxxxx", "127.0.0.1", 22)
if err != nil {
log.Fatal(err)
}
defer session.Close()
session.Run("ls /; ls /abc")
}
上面代码运行之后 , 虽然命令正常执行go语言crypto了,但是没有正常输出的结果,也没有异常输出的结果 。要想显示结果 , 需要将 session 的 Stdout 和 Stderr 重定向 修改 func main 为如下:
func main() {
session, err := connect("root", "xxxxx", "127.0.0.1", 22)
if err != nil {
log.Fatal(err)
}
defer session.Close()
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Run("ls /; ls /abc")
}
这样就能在屏幕上显示正常,异常的信息了 。
交互式命令
上面的方式无法远程执行交互式命令,比如 top , 远程编辑一个文件,比如 vi /etc/nginx/nginx.conf 如果要支持交互式的命令 , 需要当前的terminal来接管远程的 PTY 。
func main() {
session, err := connect("root", "olordjesus", "dockers.iotalabs.io", 2210)
if err != nil {
log.Fatal(err)
}
defer session.Close()
fd := int(os.Stdin.Fd())
oldState, err := terminal.MakeRaw(fd)
if err != nil {
panic(err)
}
defer terminal.Restore(fd, oldState)
// excute command
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Stdin = os.Stdin
termWidth, termHeight, err := terminal.GetSize(fd)
if err != nil {
panic(err)
}
// Set up terminal modes
modes := ssh.TerminalModes{
ssh.ECHO:1, // enable echoing
ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud
ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud
}
// Request pseudo terminal
if err := session.RequestPty("xterm-256color", termHeight, termWidth, modes); err != nil {
log.Fatal(err)
}
session.Run("top")
}
总结
好了 , 这样就可以执行交互式命令了 , 比如上面的 top 也可以通过 vi /etc/nginx/nignx.conf 之类的命令来远程编辑文件 。
关于go语言crypto和go语言入门的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 校园直播运营,校园直播系统方案
- javascript大于,js大于号怎么表示
- 阿里云服务器如何使用linux服务器配置,阿里云服务器配置教程
- 单机电脑冒险解谜游戏推荐,单机解密冒险游戏
- 鸡兔同笼python函数 python123鸡兔同笼
- 什么视频也不看的女生,有什么不看视频赚钱的软件
- 登山赛车游戏全集下载,登山赛车下载手机版
- 如何添加会动的ppt,怎么做会动的ppt
- 分词代码java 分词 java