FreeIPA:an liitettyjen hostien SSH-avaimien päivitys

February 8, 2019 – Petri Lammi

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

Samuli Seppänen

Did you like the article? Share it with others!
Categories
#aad #Access #acl #alertmanager #ansible #ansible module development #Apache #API #augeas #authentication #authorization #automation #automatization #aws #azure #backup #bash #bitbucket #buildbot #cache #centos #cloud #cloud-init #cloudflare #cloudfront #cluster #connectionsJpa #control repo #custom fact #database #debian #devops #digital sovereignty #DNS #docker #domain mode #duplo #edenred #ejabberd #email #encryption #erb #europe #eyaml #fabric #facter #facts #fargate #fedora #file #finnish #foreman #freeipa #git #github #gitlab #gnome #google #grafana #hammer #hiera #IAM #import #infinispan #Infrastructure as Code #ipmi #irc #jboss #jdk #jenkins #JMESPath #json #kanban #keycloak #letsencrypt #librarian-puppet #librenms #linkedin #Linux #Location #loop #marketing #mautic #Mellon #mfa #microsoft #monitoring #mysql #nagios #network-manager #oauth #oauth2 #office365 #oidc #openshift #open source #openvpn #oxygen #packer #paranormal #pdk #people #php #pkcs7 #pomodoro #Powershell #preseed #presentation #profiles #prometheus #provisioning #puppet #puppet-bolt #puppet-litmus #puppetboard #puppetdb #Puppetfile #puppetserver #puppet types and providers #pxeboot #qemu #quality #r10k #rds #recruitment #redirect #Restrict #Reverse Proxy #robotframework #roles #rspec #ruby #SAML #selinux #sem #shell #showsql #snmp #snmpd #software developement #spam #ssh #sso #standardization #systemd #systemd-resolved #teams #terraform #twilio #ubuntu #user-data #vagrant #vanity awards #variable #vim #virtualbox #visualstudio #webdevelopment #wildfly #Windows #wireguard #wordpress #workflow #x11 #xmpp #zimbra
We are
 Puppeteers
menucross-circle