Hallo Leute!
Als ich mich vor ein paar Monaten in die Sache eingewurstelt hab, fand ich das ziemlich komplex für einen Frischling. Und nachdem ich es jetzt öfter machen muss, hab ich mir in guter alter Linux-Manier ein Script dafür geschrieben. Offenbar hat da noch niemand dran gedacht gehabt. Außerdem will ich der Community auch was zurückgeben, wenn ich schon ein kostenloses OS verwenden darf ☺
Was tut das Ding?
Nach den wichtigsten Optionen für ssh-keygen fragen und diese übergeben
Auf Wunsch zu einem Server Kontakt aufnehmen und ~/.ssh/authorized_keys schreiben
Eigene ~/.ssh/config anlegen und die Verbindung konfigurieren
Für die Interaktion mit dem User wird Zenity verwendet
Lest es bitte mal Korrektur (meine Tests waren alle erfolgreich - ihr seid dran 😉). Ach, und falls jemand noch Wünsche hat, sagt mir das bitte. Ich will ja auch was lernen dabei ☺
So, reden kann jeder, hier der Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | #!/bin/sh # ===================== SSH Keygen & RSA-Authentication ====================== # Grapical frontend for SSH key generation and sharing (configuring # server and client to use RSA-authentication) # --------------------- Prelude ---------------------------------------------- echo "======================= SSH Keygen & RSA-Authentication =======================\n" # Please update the version number in what you feel a useful manner if you # improve this script echo "Version: 0.9 (Beta)" # Please add your information if you contributed to this work and wish to be # named echo "Author:" echo " Metal_Warrior (http://ubuntuusers.de/user/Metal-Warrior/)" echo "\nIf you find bugs or something missing, feel free to edit and or contact me :)" # I felt it a good idea to publish it under a CC BY-SA license, but we may # argue about that echo "\nPublished under CC BY-SA\nhttp://creativecommons.org/licenses/by-sa/3.0/" # --------------------- Text ------------------------------------------------- KeyGen="Schlüsselpaar-Optionen" KeyAlg="Algorithmus wählen" KeyBit="Bitlänge des Schlüssels auswählen" KeyFil="Gewünschten Namen der Schlüsseldatei eingeben:" KeySha="Key-Sharing-Optionen" KeySh1="Soll der Schlüssel für den Login\nan einem Server verwendet werden?" KeyShH="Hostnamen oder IP-Adresse eingeben:" KeyShU="Usernamen für den Host eingeben:" KeyShN="Name für die Verbindung:" KeyShF="Muss der Ordner ~/.ssh auf dem Host angelegt werden?" KeyFin="Der Schlüssel wurde unter ~/.ssh abgelegt" KeyCa1="Abbruch gewählt" KeyCa2="Soll Schlüsselerstellung abgebrochen werden?" KeyErr="Ein Fehler ist bei der Schlüsselerstellung aufgetreten!" KeyShC="Hinzufügen der Verbindung zu ~/.ssh/config fehlgeschlagen" KeyShE="Ein Fehler ist bei der Kommunikation\nmit dem Host aufgetreten!" KeyShS="Der Keyaustausch war erfolgreich" # --------------------- Functions -------------------------------------------- # Asks for Algorithm to use FunAlg () { KAlg=$(zenity --title="$KeyGen" \ --list --radiolist --text="$KeyAlg" \ --column="" --column="Algorithmus" \ TRUE "rsa" \ FALSE "rsa1" \ FALSE "dsa") KRet=$? return } # Asks for key length FunBit () { if [ "$KAlg" != "dsa" ] then KBit=$(zenity --title="$KeyGen" \ --list --radiolist --text="$KeyBit" \ --column="" --column="Bitlänge" \ FALSE "768" \ FALSE "1024" \ TRUE "2048" \ FALSE "4096") KRet=$? elif [ "$KAlg" = "dsa" ] then KBit="1024" KRet="0" fi return } # Asks for name of key file FunFil () { if [ "$KAlg" = "dsa" ] then while [ "$KFil" = "" -a "$KRet" = "0" ] do KFil=$(zenity --entry --title="$KeyGen" --text="$KeyFil" \ --entry-text="id_dsa") KRet=$? done elif [ "$KAlg" = "rsa" -o "$KAlg" = "rsa1" ] then while [ "$KFil" = "" -a "$KRet" = "0" ] do KFil=$(zenity --entry --title="$KeyGen" --text="$KeyFil" \ --entry-text="id_rsa") KRet=$? done fi return } # Asks for Host information FunSh1 () { zenity --question --title="$KeySha" --text="$KeySh1" KRet=$? while [ "$KRet" = "0" -a "$KShU" = "" ] do KShH=$(zenity --entry --title="$KeySha" --text="$KeyShH") if [ "$KShH" != "" ] then KShU=$(zenity --entry --title="$KeySha" --text="$KeyShU") KRet=$? fi done return } # Writes the local ~/.ssh/config FunSh2 () { while [ "$KShN" = "" -a "$KRet" = "0" ] do KShN=$(zenity --entry --title="$KeySha" --text="$KeyShN") KRet=$? done if [ "$KRet" = "0" ] then echo " # Script generated login keybind Host $KShN HostName $KShH User $KShU IdentityFile ~/.ssh/$KFil" >> config KRet=$? if [ "$KRet" = "1" ] then zenity --info --title="$KeySha" --text="$KeyShC" fi fi return } # Shares the public key with the server (authorized_keys file) FunSh3 () { KRet="0" KShL="$KShU@$KShH" zenity --question --title="$KeySha" --text="$KeyShF" KShF=$? if [ "$KShF" = "0" ] then ssh $KShL mkdir -p .ssh KRet=$? fi if [ "$KRet" = "0" ] then cat $KFil.pub | ssh $KShL 'cat >> .ssh/authorized_keys' KRet=$? fi if [ "$KRet" = "0" ] then zenity --info --title="$KeySha" --text="$KeyShS" else zenity --warning --title="$KeySha" --text="$KeyShE" KRet="1" fi return } # Asks if user wants to quit FunRet () { KRun="0" if [ "$KRet" = "1" ] then zenity --question --title="$KeyCa1" --text="$KeyCa2" if [ "$?" = "0" ] then exit fi KRun="1" KRet="0" fi return } # --------------------- Body ------------------------------------------------- # Asking for keygen settings KRun="1" while [ "$KRun" = "1" ] do FunAlg FunRet done KRun="1" while [ "$KRun" = "1" ] do FunBit FunRet done KRun="1" while [ "$KRun" = "1" ] do FunFil FunRet done # Generating key cd ~/.ssh/ ssh-keygen -q -b $KBit -t $KAlg -f $KFil KRet=$? if [ "$KRet" = "1" ] then zenity --warning --title="$KeyGen" --text="$KeyErr" exit else zenity --info --title="$KeyGen" --text="$KeyFin" fi # Sharing key and configuring RSA-Authentication FunSh1 if [ "$KRet" = "0" ] then FunSh2 FunSh3 fi |
Ich glaube, man erkennt ein bisschen C und Pascal - das bisschen, was ich mal hatte 😀
Grüße Metal_Warrior
P.S.: Eigentlich ist es ein Spinoff eines derzeit laufenden größeren Projekts... ein Post-Installer. Mir geht nämlich die Nachkonfiguration auch schon auf den Sack 😀 DAS Script ist aber noch weit von Beta entfernt...