main.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package main
  2. import (
  3. "crypto/rsa"
  4. "fmt"
  5. "crypto/x509"
  6. "encoding/pem"
  7. "os"
  8. "crypto/rand"
  9. "flag"
  10. )
  11. func main(){
  12. var keyfilename string
  13. var keylen int
  14. var help bool
  15. flag.IntVar(&keylen, "l", 2048, "Key Length (default: 2048)")
  16. flag.StringVar(&keyfilename, "o", "sshhost.key", "Output File Name (default: sshhost.key)")
  17. flag.BoolVar(&help, "h", false, "Show Help")
  18. if help{
  19. fmt.Println("Usage: HostKeyGen [-h] [-l <keylenth>] [-o <out_file>]")
  20. flag.PrintDefaults()
  21. return
  22. }
  23. GenerateRSAKey(keyfilename, keylen)
  24. }
  25. func GenerateRSAKey(keyfn string,keyLength int) {
  26. privateKey, err := rsa.GenerateKey(rand.Reader, keyLength)
  27. if err != nil {
  28. fmt.Println("Failed to Generate RSA Private Key: ", err)
  29. return
  30. }
  31. derStream := x509.MarshalPKCS1PrivateKey(privateKey)
  32. block := &pem.Block{
  33. Type: "RSA PRIVATE KEY",
  34. Bytes: derStream,
  35. }
  36. file, err := os.Create(keyfn)
  37. if err != nil {
  38. fmt.Println("Failed to Create Key File: ", err)
  39. return
  40. }
  41. err = pem.Encode(file, block)
  42. if err != nil {
  43. fmt.Println("Failed to Encode Key: ", err)
  44. return
  45. }
  46. fmt.Println("SSH Host Key Generated Successfully..")
  47. }