2021-11-15 来源:华纳网 责任编辑:谷雨老师 人气:
核心提示:知识点:创建一个SSH客户端 自动化运维

知识点:

创建一个SSH客户端

自动化运维

 

 

本课内容:

大家好,欢迎来到谷雨课堂

 

我们日常对服务器进行维护和使用时,

免不了使用SSH,

我们在程序里其实也可以使用集成SSH来做一些有趣的工作,

比如我们可以实现自动化的服务器运维,

或者自己实现一个交互的SHELL

 

本节我们用Go来实现一个可完全交互的SHELL,

我们把服务器的IP地址、帐号密码都内置到程序中,

这样运行程序,

我们就可以操纵服务器了,

是不是很方便,

 

不过在正式使用时,

可千万要注意安全性,

不可随意的密码放在代码里。

 

 

以下是本节的代码:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
package main
import ("fmt""log""os"
"golang.org/x/crypto/ssh""golang.org/x/crypto/ssh/terminal")
func main() {  config := &ssh.ClientConfig{    User: "root",    Auth: []ssh.AuthMethod{      ssh.Password("密码"),    },    HostKeyCallback: ssh.InsecureIgnoreHostKey(),  }
  client, err := ssh.Dial("tcp", "127.0.0.1:22", config)if err != nil {    log.Fatal("Failed to dial: ", err)  }
  session, err := client.NewSession()
if err != nil {panic(err)  }
defer session.Close()  fd := int(os.Stdin.Fd())
  state, err := terminal.MakeRaw(fd)if err != nil {panic(err)  }
defer terminal.Restore(fd, state)
  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,  }
// Request pseudo terminalif err := session.RequestPty("xterm", 40, 80, modes); err != nil {    log.Fatal("SSH连接失败: ", err)  }
if err := session.Shell(); err != nil {    log.Fatal("启动SHELL失败: ", err)  }
  fmt.Println(session.Wait())}

 

扩展阅读:

SSH 为 Secure Shell 的缩写,

由 IETF 的网络小组(Network Working Group)所制定;

SSH 为建立在应用层基础上的安全协议。

SSH 是较可靠,

专为远程登录会话和其他网络服务提供安全性的协议。

利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

SSH最初是UNIX系统上的一个程序,

后来又迅速扩展到其他操作平台。

SSH在正确使用时可弥补网络中的漏洞。

SSH客户端适用于多种平台。

几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,

以及其他平台,都可运行SSH。

 

SSH提供两种级别的安全验证。

第一种级别(基于口令的安全验证)

只要你知道自己帐号和口令,

就可以登录到远程主机。

所有传输的数据都会被加密,

但是不能保证你正在连接的服务器就是你想连接的服务器。

可能会有别的服务器在冒充真正的服务器,

也就是受到“中间人”这种方式的攻击。

 

第二种级别(基于密匙的安全验证)

需要依靠密匙,

也就是你必须为自己创建一对密匙,

并把公用密匙放在需要访问的服务器上。

如果你要连接到SSH服务器上,

客户端软件就会向服务器发出请求,

请求用你的密匙进行安全验证。

服务器收到请求之后,

先在该服务器上你的主目录下寻找你的公用密匙,

然后把它和你发送过来的公用密匙进行比较。

如果两个密匙一致,

服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。

客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

 

 

 

完整的源代码可以登录【华纳网】下载。

https://www.worldwarner.com/




 

 

 

                                                                 





免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。