最近碰到一件蠢事兒,有個服務器的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,否則沒辦法用原來的用戶名密碼