package main import ( "crypto/rsa" "fmt" "crypto/x509" "encoding/pem" "os" "crypto/rand" "flag" ) func main(){ var keyfilename string var keylen int var help bool flag.IntVar(&keylen, "l", 2048, "Key Length (default: 2048)") flag.StringVar(&keyfilename, "o", "sshhost.key", "Output File Name (default: sshhost.key)") flag.BoolVar(&help, "h", false, "Show Help") if help{ fmt.Println("Usage: HostKeyGen [-h] [-l ] [-o ]") flag.PrintDefaults() return } GenerateRSAKey(keyfilename, keylen) } func GenerateRSAKey(keyfn string,keyLength int) { privateKey, err := rsa.GenerateKey(rand.Reader, keyLength) if err != nil { fmt.Println("Failed to Generate RSA Private Key: ", err) return } derStream := x509.MarshalPKCS1PrivateKey(privateKey) block := &pem.Block{ Type: "RSA PRIVATE KEY", Bytes: derStream, } file, err := os.Create(keyfn) if err != nil { fmt.Println("Failed to Create Key File: ", err) return } err = pem.Encode(file, block) if err != nil { fmt.Println("Failed to Encode Key: ", err) return } fmt.Println("SSH Host Key Generated Successfully..") }