题记:
上周服务器断了,本地登录处理·记不起root 密码,抓瞎了。MobaXterm 客户端上是保存了密码的,但是免费版无法查看。
于是想着可不可以假冒个服务器接收登录请求,解析出密码。
使用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:10005",
Handler: homeHandler, //
//PublicKeyHandler:
PasswordHandler: passwordHandler,
}
s.AddHostKey(key)
log.Fatal(s.ListenAndServe())
}
使用说明:
1、当前目录需要一个id_rsa文件,到用户目录.ssh拷贝一个就行
2、Addr: "127.0.0.1:10005" 改成自己的地址和端口
3、添加hosts映射,将你连接的服务器地址映射到127.0.0.1,比如
127.0.0.1 ddns.weiqinxue.cn
使用如下运行GO脚本(fake_ssh.go 为文件名):
go run fake_ssh.go
点击ssh连接服务器,可以看到账号密码如图: