运维平台架构设计及开发(持续更新中...)

开发环境: Python 2.x GoLang 1.6 Django 1.6 Bootstrap 3.0 JQuery1.8 架构: 模块介绍: Agent:使用GoLang开发,主要收集主机信息、执行下发任务、主机状态上报、服务检测等 Master:使用GoLang开发,接收Agent上报的信息,存储到MySQL Dashboard:使用Python Django开发,前台展示及管理。前端使用B......
Python 2019年01月26日 17:15:58

Go实现SSH-Server服务端(1)

1、 前言概述 Go有一个SSH库(golang.org/x/crypto/ssh)提供了丰富的接口,我们将基于此包实现SSH-Server服务端(SSHD)(也可实现SSH Client、SSH Proxy等),基于此包可实现SSH体系的扩展等。 2、 SSH架构 TCP传输层:建立TCP连接,后进行SSH协议处理 Handshake:SSH协议的数据传输(主要是提供数据加密传输) Authen......
GoLang 2022年05月07日 17:18:35

Go实现SSH-Client客户端(2)

上一篇我们实现了一个SSH-Server的服务,这篇我们实现SSH-Client。SSH的客户端常见有交互式 tty-bash 和命令执行,其中命令执行又分为交互式 command 和一般的 bash 命令,如tail、top等属于交互式命令,而 ls、who 等属于一般的 bash 执行。 1、交互方式 package main import ( log os golang.org/x/cryp......
GoLang 2022年05月07日 17:10:55

GoLang RPC 和 TLS 鉴权实现

实现 Go 语言远程过程调用(Remote Procedure Call, RPC),基于 Golang 标准库 net/rpc,同时基于 TLS/SSL 实现服务器端和客户端的单向鉴权、双向鉴权。 RPC 介绍 远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)......
GoLang 2021年10月25日 17:45:56

Go mod使用实践

Golang一直以来都缺少一个包管理工具,在Go mod出现之前安装软件依赖包只能使用go get,后来出现了vender(Golang1.5版本后),但并不理想vender类似node modules会在工程下建立一个目录然后把所有的依赖放在目录下,依赖越多这个目录也就越大,而且每个工程都需建立一个目录,比较浪费资源,但也确实解决了一些问题。自从Go 1.11引入Go mod摒弃vendor和G......
GoLang 2019年07月23日 13:55:18

Go语言值传递和指针传递(引用传递)

总的来说Go的函数只有一种传递方式,就是值传递。将一个变量作为参数传递时,都会创建一个新的变量副本并将其传递给所调用的函数,副本分配在不同的内存地址,在指针传递变量的情况下,将创建指向相同内存地址的新副本。 package main import ( fmt ) type self struct { Name string } func (s self) self_change_name(name......
GoLang 2019年05月07日 10:59:47

Go命令使用

1、go install 将编译的中间文件放在 GOPATH 的 pkg 目录下,将编译结果放在 GOPATH 的 bin 目录下。 注意: go install 是建立在 GOPATH 上的,无法在独立的目录里使用 go install GOPATH 下的 bin 目录放置的是使用 go install 生成的可执行文件,可执行文件的名称来自于编译时的包名 go install 输出目录始终为 ......
GoLang 2019年05月06日 14:29:20

Go代码性能小技巧

1、字符串+号拼接 +号在拼接字符串上很方便,但性能上确实很慢(+string扩充容量慢),当数量级比较大的时候,性能比Python脚本还慢 package test import ( testing ) func TestAdd(t *testing.T) { str := for i := 0; i 100000; i++ { str += add } } # 测试 go test -v -r......
GoLang 2019年05月06日 12:24:03

Go实现类telnet客户端连接获取信息

最近在写服务的监控,因项目比较老最早的开发人员早已不在,想获取服务的同时在线人数,通过telnet命令是可以获取,今天想用Go实现类telnet命令的获取方式。 package main import ( net os fmt io strings strconv ) var ( hostPost string = 127.0.0.1:1900 ) func main() { conn, err ......
GoLang 2019年04月19日 16:38:14