2016-09-28 11 views
0

Goで自分のSSH指紋を取得するにはどうすればよいですか?ゴーランのSSH指紋

Finger, err := ssh.** 
log.Println(Finger) 
// 12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53 
+0

何の指紋?あなたのリモートサーバ、ローカルのsshサーバ、ssh-agentの特定の公開鍵、ローカルファイル? (そして、あなたが例として示しているそのパターンは、もはや使用されていないmd5の指紋です) – JimB

+0

@JimB私のローカルマシン。私はそれをterraformと一緒に使う必要があります。 – CESCO

+0

@JimB https://www.terraform.io/docs/providers/do/r/droplet.html – CESCO

答えて

4

キーシグネチャは、sshワイヤ形式の暗号化されていないキーデータの単なる暗号化ハッシュです。ここで

は、OpenSSH形式の公開鍵からSSHキーを解析し、MD5フィンガープリントを得るための基本的な例です。これを行うには

key, err := ioutil.ReadFile("/path/to/id_rsa.pub") 
if err != nil { 
    log.Fatal(err) 
} 

parts := strings.Fields(string(key)) 
if len(parts) < 2 { 
    log.Fatal("bad key") 
} 

k, err := base64.StdEncoding.DecodeString(parts[1]) 
if err != nil { 
    log.Fatal(err) 
} 

fp := md5.Sum([]byte(k)) 
fmt.Print("MD5:") 
for i, b := range fp { 
    fmt.Printf("%02x", b) 
    if i < len(fp)-1 { 
     fmt.Print(":") 
    } 
} 
fmt.Println() 
+0

完璧!ただ2つの文字をすべて正しい答えと見なすために:を追加するだけです。 – CESCO

+0

私はまだ最終結果を文字列に取り込むのに問題があります。 @JimB – CESCO

+0

@CESCO:あなたはどうして問題を抱えていますか?この例ではstdoutに出力しますが、文字列の操作はほとんど同じです。 – JimB

1

もう一つの方法は、sshパッケージを使用してキーを解析することであり、その後、フィンガープリントを生成するためにFingerprintLegacyMD5を使用してください。この回答を見る:

https://stackoverflow.com/a/46430102/1601137