FreeIPA on Linux-verkkojen "Active Directory", jossa on integroitu lukuisia eri komponentteja (mm. LDAP, Kerberos, CA, sssd) siten, että Linux-koneet saadaan liitettyä domainiin. Domainiin liittäminen mahdollistaa mm. keskitetyt käyttäjätunnukset, kertakirjautumisen ja SSH-avaimien ja SSH host-avaimien jakelun. FreeIPA:n voi pystyttää sen omalla asennusohjelmalla, johon iso osa myös puppet-ipa moduulin toiminnallisuudesta perustuu.
FreeIPA:ssa on kuitenkin yksi pieni ärsyttävyys: mikäli noodi (esim. palvelin) rakennetaan (esim. AWS EC2 snapshotista) tai provisioidaan (esim. PXE boot) uudelleen, saattavat FreeIPA:ssa säilytettävät SSH host-avaimet mennä epäsynkkaan todellisuuden kanssa. Käytännössä koneelle ei enää silloin pääse kirjautumaan ilman SSH:n tietoturvamekanismien härskiä kiertämistä:
$ ssh -o GlobalKnownHostsFile=/dev/null server.example.org
Onneksi virheelliset SSH-avaimet saa korjattua FreeIPA-palvelimelta käsin melko suoraviivaisesti. Ensin haetaan noodin nykyinen host-avain:
$ ssh-keyscan server.example.org
Kun host-avain on tiedossa, päivitetään noodin tiedot FreeIPA:ssa:
$ kinit admin $ ipa host-mod server.example.org --sshpubkey='pubkey-here'
Koko homman kinittiä lukuun ottamatta voi tehdä myös tällä skriptillä:
#!/bin/sh # # Replace an outdated FreeIPA SSH host key with the active one. # usage() { echo "fix-ipa-host-key.sh <host> <key-types>" echo echo "Examples:" echo " fix-ipa-host-key.sh server.example.org dsa,rsa" echo " fix-ipa-host-key.sh server.example.org rsa,ecdsa,ed25519" echo exit 1 } if [ "${1}" = "" ] || [ "${2}" = "" ]; then usage fi if [ "${3}" != "" ]; then usage fi HOST=$1 KEY_TYPES="$2" IPA_CMDLINE="ipa host-mod $HOST" for KEY_TYPE in $(echo $KEY_TYPES|sed s/","/" "/g); do echo $KEY_TYPE|grep -E '^(dsa|rsa|ecdsa|ed25519) > /dev/null if [ $? -ne 0 ]; then echo "ERROR: invalid key type ${KEY_TYPE}! Valid values are dsa, rsa, ecdsa and ed25519." else HOST_KEY=$(ssh-keyscan -t $KEY_TYPE $HOST 2> /dev/null|cut -d " " -f 2-) IPA_CMDLINE="${IPA_CMDLINE} --sshpubkey='$HOST_KEY'" fi done IPA_SCRIPT=$(mktemp) chmod 700 $IPA_SCRIPT echo $IPA_CMDLINE > $IPA_SCRIPT $IPA_SCRIPT rm $IPA_SCRIPT