golang

使用golang开发一个windows下sshclient.exe

上一篇文章写了如何在Linux下开发一个sshclient命令行,本次我们回到Windows下来,因为golang是跨平台的,所以我们只需要设置下Windows下的环境变量,其它指令可不变。 一、安装golang 下载Windows安装包 原始链接:https://dl.google.com/go/go1.15.6.windows-amd64.msi 如果被墙,自行解决。双击安装,过程忽略。 二、设置环境变量 Win10下右键“此电脑”->“属性”->"高级"->"环境变量",直接上图,不解释。 添加了一个GOROOT,为安装包路径,GOPATH为项目路径 三、开始编译 将附件压缩包解压到如下路径,注意路径哦 打开传说中的cmd(Win+R),眼前一片亮眼而令人窒息的黑!! 反手就是一把命令如下: cd /d D:\go\src\go-ssh-examples-master 编译上啊! go build client.go 当前目录下出现一个client.exe,执行: 好了,现在你可以拿去其它Windows平台的CMD下愉快的玩耍了。 可以在脚本刷刷作响~~~
阅读全文
其它

使用golang开发一个sshclient命令

1.背景说明 周末的时间学习研究了下golang,以下是以自身的视角了解的一些背景:众所周知,在Linux系统中开发,早期因为系统存储空间比较小,人们为了减少程序的体积,使用了动态链接技术,这样,各个程序所使用的体积相对较小,另一方面也能够方便的进行程序公共库的升级和维护。但是到现代,出现了各种各样的Linux发行版本,各个Linux软件的程序库版本不一致,加上docker等技术的兴起,对于分布式系统软件的上线运维是个灾难。go的出现,静态链接方式似乎弥补了这一缺陷,大量的开发者们开始使用golang作为后端开发语言,一方面可以一次编译,到处运行,另一方面,写一个高性能高并发的程序仅仅只需要几行代码就可以达到目的。 2.开始旅行 接下来我们以一个完整的小demo来进行一次golang的旅行。 首先是安装golang环境,这个比较简单,我们只需要从官网下载其开发包即可,上命令: wget https://golang.google.cn/dl/go1.15.6.linux-amd64.tar.gz #将其安装在/usr/local目录下 tar zxf go1.15.6.linux-amd64.tar.gz -C /usr/local 3.设置环境变量 这里我们简单点,将其放在/etc/profile末尾: #go的安装路径 export GOROOT=/usr/local/go #项目路径 export GOPATH=/root/code/go #go二进制所在路径 export PATH=$PATH:$GOROOT/bin #设置处理器架构 export GOARCH=amd64 #设置操作系统 类型 export GOOS=linux 至此,我们环境设置完毕,其中比较关键的是我们的项目路径/root/code/go,在其下可以手动再创建一个src目录。 开始安装ssh开发包,如下命令: go get github.com/melbahja/goph 但是在安装过程中我们会神奇的发现,老是安装不上,因为国家防火墙,你懂的。此时我们可以把开发包直接从github上下载过来,放到/root/code/go/src/github.com/melbahja/goph目录下,下载地址如下: https://github.com/Scalingo/go-ssh-examples 但是当我们使用库时,可能还提示我们需要安装一些依赖,命令如下: go get golang.org/x/crypto/ssh 此命令可能也会被墙,建议下载对应的源码包进行安装,地址: https://github.com/golang/crypto 路径为:/root/code/go/src/golang.org/x/crypto 接着,我们依次执行如下命令: cd /root/code/go/src/go-ssh-examples bash init.sh 修改下go-ssh-examples目录下的client.go文件,让其支持传入密码进行执行,代码修改如下: 接下来,重点来了,我们将其编译成静态可执行文件: CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' client.go 执行效果如下: 好了,至此,golang从入门,接下来……你懂的
阅读全文

2个关于“停车位”的故事

不知道为啥,最近看到不少文章,甚至抖音上都在讲关于停车位的故事,由此我想到两个故事,也在此分享一点我的感想。 故事一:讲的是我之前看到过的“停车位理论”,已经忘了是在什么书上或网站看到的,这是哈佛大学的一位校长凯瑟琳.福斯特与无数哈佛毕业生分享过的一个理论。虽然不知道听过的毕业生有何感想,又从中有多少受益。这个理论讲的是:不要因为没有停车位就把车停在距离目的地20个街区远的地方,要直接去你想去的地方,如果车位已满,大不了再绕回来。 在现实生活中,我们总是为自己在实现目标的过程中,找出各种借口和理由来放弃一些自己向往的机会、工作或者决定。我们见得多的场景比如:到了毕业季,很多谈心担心未来的前途灰暗,看不到结果,选择分手;再比如:担心减肥或健身过程中有太多痛苦,怕自己承受不了,从而选择安逸。这些场景有一个共同点,就是在做一些行为或决定前,选择一条简单的、短暂痛苦的路来规避不确定的风险,但不知可能会带来长期的痛苦。 所以,遇事不为自己找理由、找借口,最大的敌人来自于对未来的恐惧,使得我们一退再退,就像“停车位理论”说的那样,先到直接想要的地方去看看,如果没有车位了,大不了再绕回来,又有什么关系。 故事二:最近有一件事情发生在我身上,牙齿因为蛀牙,已经腐蚀了牙神经,要做根管治疗,就选择一家就在小区旁边的体检医院做治疗,花了一千来块钱。然后老婆得知后,就咨询了她医院的朋友,被告知说,做根管治疗是可以医保免费报销的,就开始问了医生很多相关问题。那个医生在事后也发微信给我说我老婆可能不太相信他们医院,如果担心,也建议我去大医院咨询下。 此时,我给医生回复了一个停车位费用的故事:有的人为了节省几块钱停车场费用,把车停在马路边,结果被抄牌后罚了200,这时候觉得当初交50块钱停车费都愿意。我相信您的技术,很多时候看似亏了,但没有算总体的交易成本:停马路边的担心,找马路停车的时间等等。我要的是质量好,结果好,就满意了。 医生后续又非常用心的给我回复了一些关于牙齿治疗和保养的问题,而这些私人的定制服务是大医院里不具备的。 在这个故事中,我联想到最近在看的俞军老师在他的《产品方法论》里提到的,所有活动行为都是交易,有交易就会有成本,交易成本并不是眼前看到的单方面的,它是一个需要综合计算的活动。
阅读全文

MySQL 8.0 误删了root用户折腾记

背景:最新想尝鲜安装下ubuntu 20.04,默认mysql版本为8.0,一不小心把root用户给删除了,开始折腾。 一、修改配置文件 在配置文件/etc/mysql/conf.d/mysql.cnf中增加2行 skip-grant-tables 重启mysql服务: sudo systemctl restart mysql.service 登录mysql,分别执行以下几行code use mysql; insert into user(User,authentication_string,ssl_cipher,x509_issuer,x509_subject) values('root','','','',''); update user set Host='localhost',select_priv='y', insert_priv='y',update_priv='y',Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';commit; 二、修改配置为正常再修改root密码 将密码修改成root@12345 mysql use mysql; alter user 'root'@'localhost' identified with mysql_native_password by 'root@12345';
阅读全文