Go SSH连接

565 次浏览次阅读
没有评论

需要用到的包 (需要科学上网)

go get golang.org/x/crypto/ssh

SSH 是什么

SSH(Secure Shell)是较可靠,专为远程登录会话和其他网络服务提供安全性的协议,利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

SSH 如何工作

SSH 由服务器和客户端组成, 在实现客户端与服务器建立安全通信的过程中,经历如下阶段

  1. 连接建立

SSH 服务器在指定的端口侦听客户端的连接请求,在客户端向服务器发起连接请求后,双方建立一个 TCP 连接。

  1. 版本协商

SSH 协议目前存在 SSH1.X(SSH2.0 之前的版本)和 SSH2.0 版本。SSH2.0 协议相比 SSH1.X 协议来说,在结构上做了扩展,可以支持更多的认证方法和密钥交换方法,同时提高了服务能力。SSH 服务器和客户端通过协商确定最终使用的 SSH 版本号。

  1. 算法协商

SSH 支持多种加密算法,双方根据各自支持的算法,协商出最终用于产生会话密钥的密钥交换算法、用于数据信息加密的加密算法、用于进行数字签名和认证的公钥算法以及用于数据完整性保护的 HMAC 算法。

  1. 密钥交换

服务器和客户端通过密钥交换算法,动态生成共享的会话密钥和会话 ID,建立加密通道。会话密钥主要用于后续数据传输的加密,会话 ID 用于在认证过程中标识该 SSH 连接。

  1. 用户认证

SSH 客户端向服务器端发起认证请求,服务器端对客户端进行认证。SSH 支持以下几种认证方式:

  • 密码(password)认证:客户端通过用户名和密码的方式进行认证,将加密后的用户名和密码发送给服务器,服务器解密后与本地保存的用户名和密码进行对比,并向客户端返回认证成功或失败的消息。
  • 密钥(publickey)认证:客户端通过用户名,公钥以及公钥算法等信息来与服务器进行认证。
  • password-publickey 认证:指用户需要同时满足密码认证和密钥认证才能登录。
  • all 认证:只要满足密码认证和密钥认证其中一种即可。
  1. 会话请求

认证通过后,SSH 客户端向服务器端发送会话请求,请求服务器提供某种类型的服务,即请求与服务器建立相应的会话。

  1. 会话交互

会话建立后,SSH 服务器端和客户端在该会话上进行数据信息的交互。

实现 (以密码的方式)

  1. ssh 配置
    config := ssh.ClientConfig{
        User:            _const.Name,
        Auth:            []ssh.AuthMethod{ssh.Password(_const.Password)},
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),}
  1. 建立 tcp 连接
    client, err := ssh.Dial("tcp", _const.Address+_const.Port, &config)
    if err != nil {log.Fatal(err)
    }
  1. 创建一个会话
    session, err := client.NewSession()
    if err != nil {log.Fatal(err)
    }
    defer session.Close()
  1. 发起会话请求
    err = session.RequestPty("xterm", 32, 160, modes)
    if err != nil {log.Fatal(err)
    }
  1. 运行

Go SSH 连接

  1. 完整代码

gossh

正文完
 0
评论(没有评论)