最近碰到一件蠢事儿,有个服务器的ssh密码给忘记了,找来找去后来发现只有在一台电脑的ssh客户端mobaxterm里存储了,找了一圈发现客户端里存储的都是加密后的密码,没法显示明文(mobaxterm比较奇葩付费就可以获得明文)。后来想来想去自己写了个fake ssh-server专门用来打印登录时的用户名密码,用go也就几行,分享一下
package main
import (
"github.com/gliderlabs/ssh"
gossh "golang.org/x/crypto/ssh"
"io/ioutil"
"log"
)
func homeHandler(s ssh.Session) {
}
func passwordHandler(ctx ssh.Context, password string) bool {
log.Printf("username:%s, password:%s\n", ctx.User(), password)
return true
}
func main() {
keyPath := "id_rsa"
keyData, err := ioutil.ReadFile(keyPath)
if err != nil {
log.Fatal(err)
return
}
key, err := gossh.ParsePrivateKey(keyData)
if err != nil {
log.Fatal(err)
return
}
s := &ssh.Server{
Addr: "127.0.0.1:8099",
Handler: homeHandler, //
//PublicKeyHandler:
PasswordHandler: passwordHandler,
}
s.AddHostKey(key)
log.Fatal(s.ListenAndServe())
}
这代码很简单,一目了然,这里就不详细解释了,需要的同学自取
需要注意的一点是,需要改host把原来的域名地址解析到127.0.0.1,否则没办法用原来的用户名密码
版权声明:本文为HopingWhite原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。