diff --git a/CHANGELOG.md b/CHANGELOG.md index 8480408b..9ba96eab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Make gRPC Unix Socket permissions configurable [#292](https://github.com/juanfont/headscale/pull/292) - Trim whitespace before reading Private Key from file [#289](https://github.com/juanfont/headscale/pull/289) +- Add new command to generate a private key for `headscale` [#290](https://github.com/juanfont/headscale/pull/290) - Fixed issue where hosts deleted from control server may be written back to the database, as long as they are connected to the control server [#278](https://github.com/juanfont/headscale/pull/278) **0.12.3 (2022-01-13):** diff --git a/cmd/headscale/cli/generate.go b/cmd/headscale/cli/generate.go new file mode 100644 index 00000000..24844146 --- /dev/null +++ b/cmd/headscale/cli/generate.go @@ -0,0 +1,41 @@ +package cli + +import ( + "fmt" + + "github.com/spf13/cobra" + "tailscale.com/types/key" +) + +func init() { + rootCmd.AddCommand(generateCmd) + generateCmd.AddCommand(generatePrivateKeyCmd) +} + +var generateCmd = &cobra.Command{ + Use: "generate", + Short: "Generate commands", +} + +var generatePrivateKeyCmd = &cobra.Command{ + Use: "private-key", + Short: "Generate a private key for the headscale server", + Run: func(cmd *cobra.Command, args []string) { + output, _ := cmd.Flags().GetString("output") + machineKey := key.NewMachine() + + machineKeyStr, err := machineKey.MarshalText() + if err != nil { + ErrorOutput( + err, + fmt.Sprintf("Error getting machine key from flag: %s", err), + output, + ) + } + + SuccessOutput(map[string]string{ + "private_key": string(machineKeyStr), + }, + string(machineKeyStr), output) + }, +}