|
@@ -244,7 +244,7 @@ func CheckPublicKeyString(content string) (bool, error) {
|
|
|
}
|
|
|
|
|
|
// saveAuthorizedKeyFile writes SSH key content to authorized_keys file.
|
|
|
-func saveAuthorizedKeyFile(key *PublicKey) error {
|
|
|
+func saveAuthorizedKeyFile(keys ...*PublicKey) error {
|
|
|
sshOpLocker.Lock()
|
|
|
defer sshOpLocker.Unlock()
|
|
|
|
|
@@ -269,8 +269,13 @@ func saveAuthorizedKeyFile(key *PublicKey) error {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- _, err = f.WriteString(key.GetAuthorizedString())
|
|
|
- return err
|
|
|
+ for _, key := range keys {
|
|
|
+ _, err = f.WriteString(key.GetAuthorizedString())
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nil
|
|
|
}
|
|
|
|
|
|
// AddPublicKey adds new public key to database and authorized_keys file.
|
|
@@ -422,3 +427,21 @@ func DeletePublicKey(key *PublicKey) error {
|
|
|
}
|
|
|
return os.Rename(tmpPath, fpath)
|
|
|
}
|
|
|
+
|
|
|
+// RewriteAllPublicKeys remove any authorized key and re-write all key from database again
|
|
|
+func RewriteAllPublicKeys() error {
|
|
|
+ keys := make([]*PublicKey, 0, 5)
|
|
|
+ err := x.Find(&keys)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ fpath := filepath.Join(SshPath, "authorized_keys")
|
|
|
+ if _, err := os.Stat(fpath); os.IsNotExist(err) {
|
|
|
+ return saveAuthorizedKeyFile(keys...)
|
|
|
+ }
|
|
|
+ if err := os.Remove(fpath); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return saveAuthorizedKeyFile(keys...)
|
|
|
+}
|