diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel
index f385eb25d075ccb6dc8270ae28cc00b20bf9e66f..fa347a7b9e4b02c8a2dc8d1e7e9b9d593393deb3 100755
--- a/src/freedombone-controlpanel
+++ b/src/freedombone-controlpanel
@@ -128,6 +128,64 @@ function change_password {
     any_key
 }
 
+function change_ssh_public_key {
+    select_user
+    if [ ! $SELECTED_USERNAME ]; then
+        return
+    fi
+
+    if grep -Fxq "Admin user: $SELECTED_USERNAME" $COMPLETION_FILE; then
+        dialog --title "Change ssh public key" \
+               --backtitle "Freedombone Control Panel" \
+               --defaultno \
+               --yesno "\nThis is the administrator user.\n\nAre you sure you want to change the ssh public key for the administrator?" 10 60
+        sel=$?
+        case $sel in
+            1) return;;
+            255) return;;
+        esac
+    fi
+
+    data=$(tempfile 2>/dev/null)
+    trap "rm -f $data" 0 1 2 5 15
+    dialog --title "Change ssh public key for $SELECTED_USERNAME" \
+           --backtitle "Freedombone Control Panel" \
+           --inputbox "Paste the ssh public key below" 8 60 2>$data
+    sel=$?
+    case $sel in
+        0)
+            SSH_PUBLIC_KEY=$(<$data)
+            if [ "$SSH_PUBLIC_KEY" ]; then
+                if [ ${#SSH_PUBLIC_KEY} -gt 5 ]; then
+                    if [ -f "$SSH_PUBLIC_KEY" ]; then
+                        if [ ! -d /home/$SELECTED_USERNAME/.ssh ]; then
+                            mkdir /home/$SELECTED_USERNAME/.ssh
+                        fi
+                        cp $SSH_PUBLIC_KEY \
+                           /home/$SELECTED_USERNAME/.ssh/authorized_keys
+                        chown -R $SELECTED_USERNAME:$SELECTED_USERNAME \
+                              /home/$SELECTED_USERNAME/.ssh
+                        dialog --title "Change ssh public key" \
+                               --msgbox "ssh public key was installed" 6 40
+                    else
+                        if [[ "$SSH_PUBLIC_KEY" == "ssh-"* ]]; then
+                            if [ ! -d /home/$SELECTED_USERNAME/.ssh ]; then
+                                mkdir /home/$SELECTED_USERNAME/.ssh
+                            fi
+                            echo "$SSH_PUBLIC_KEY" > \
+                                 /home/$SELECTED_USERNAME/.ssh/authorized_keys
+                            chown -R $SELECTED_USERNAME:$SELECTED_USERNAME \
+                                  /home/$SELECTED_USERNAME/.ssh
+                            dialog --title "Change ssh public key" \
+                                   --msgbox "ssh public key was installed" 6 40
+                        fi
+                    fi
+                fi
+            fi
+            ;;
+    esac
+}
+
 function add_to_mailing_list {
     select_user
     if [ ! $SELECTED_USERNAME ]; then