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