diff --git a/key/key.go b/key/key.go
index cb4ade461f27fb0faa1d1159c60166a427d1461a..92f1373fb80bed002d5be8e2be129b1a31084653 100644
--- a/key/key.go
+++ b/key/key.go
@@ -20,7 +20,12 @@ func Add(login, public string) error {
 
 	keyline := fmt.Sprintf(keytemplate, bulletin, login, public)
 
-	keyfile := path.Join(xdg.Home, ".ssh", "authorized_keys")
+	sshdir := path.Join(xdg.Home, ".ssh")
+	err = os.MkdirAll(sshdir, 0700)
+	if err != nil {
+		return err
+	}
+	keyfile := path.Join(sshdir, "authorized_keys")
 
 	f, err := os.OpenFile(keyfile, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
 	if err != nil {