SSH-Jumphost einrichten | Proxyjump mit freeIPA und Kerberos-Tickets

SSH-Jumphost einrichten | Proxyjump mit freeIPA und Kerberos-Tickets

Ich möchte eine Bastion (SSH-Jumphost) einrichten, um auf das Netzwerk hinter einer Firewall zuzugreifen. Beide Server befinden sich in einer FreeIPA-Domäne. Der Client ist eine Benutzermaschine und nicht Teil der IPA-Domäne.

Internet/Client —> SSH-Jumphost —> Login-Knoten

Mein Plan ist, mich mit den Anmeldeinformationen beim SSH-Jumphost anzumelden, um ein gültiges TGT zu erhalten, und dann über das erhaltene Kerberos-Ticket per SSH eine Verbindung zum Anmeldeserver herzustellen.

Daher habe ich die SSH- und SSHD-Konfigurationen so geändert, dass die Weitergabe von GSSAPI-Credentials erlaubt ist.

# IPA-related configuration changes to sshd_config

PubkeyAuthentication yes
KerberosAuthentication no
GSSAPIAuthentication yes
UsePAM yes
ChallengeResponseAuthentication yes
AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser nobody

# added
PasswordAuthentication no

Und die SSH-Konfiguration:

# IPA-related configuration changes to ssh_config
#
PubkeyAuthentication yes
GlobalKnownHostsFile /var/lib/sss/pubconf/known_hosts
#VerifyHostKeyDNS yes

# assumes that if a user does not have shell (/sbin/nologin),
# this will return nonzero exit code and proxy command will be ignored
Match exec true
        ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h


#added 
GSSAPIAuthentication yes
GSSAPITrustDns yes
GSSAPIKeyExchange yes
GSSAPIRenewalForcesRekey yes
Host login
    GSSAPIDelegateCredentials yes

Wenn ich mich per SSH beim Jumphost anmelde, erhalte ich ein gültiges Kerberos-Ticket. Danach kann ich per SSH auf den Login zugreifen, ohne Anmeldeinformationen eingeben zu müssen.

 $(j@client) ssh jumphost
(USER@jumphost) password:
$(@jumphost) klist
Credential-Cache: KCM:1791600003:19884
Standard-Principal: user@REALM

Valid starting       Expires              Service principal
22.11.2022 17:45:38  23.11.2022 17:35:51  krbtgt/REALM@REALM
$(@jumphost) ssh login

$(@login) klist
Credential-Cache: KCM:1791600003:66779
Standard-Principal: user@REALM

Valid starting       Expires              Service principal
22.11.2022 17:47:51  23.11.2022 17:35:51  krbtgt/REALM@REALM

Wenn ich dies jedoch in einem Schritt versuche, muss ich bei jedem Server meine Anmeldeinformationen eingeben:

$(@client) ssh -J jumphost login
(user@jumphost) Password: 
(user@login) Password: 

Anschließend bin ich zwar eingeloggt und habe ein gültiges TGT, weiß aber nicht, warum ich mein Passwort zweimal eingeben muss.

Ich möchte nur einmal zur Eingabe meines Passworts gezwungen werden.

Ich habe dies auch mit verschiedenen SSH-Konfigurationen auf dem Client versucht.

Host login
  User USER
  #GSSAPIAuthentication yes
  #GSSAPIDelegateCredentials yes
  HostName login
  ProxyJump USER@jumphost

Mit und ohne GSSAPI-Optionen.

Host jumphost
  User USER
  HostName jumphost

Host login
  User USER
  #GSSAPIAuthentication yes
  #GSSAPIDelegateCredentials yes
  HostName login
  ProxyJump jumphost

Mit und ohne GSSAPI-Optionen.

Alle Varianten führen dazu, dass ich mein Passwort zweimal eingeben muss.

Was vermisse ich?

Bearbeiten: krb5.conf hinzugefügt

#File modified by ipa-client-install

includedir /etc/krb5.conf.d/
includedir /var/lib/sss/pubconf/krb5.include.d/

[libdefaults]
  default_realm = RELAM
  dns_lookup_realm = true
  rdns = false
  dns_canonicalize_hostname = false
  dns_lookup_kdc = true
  ticket_lifetime = 24h
  forwardable = true
  udp_preference_limit = 0
  default_ccache_name = KEYRING:persistent:%{uid}


[realms]
  REALM = {
    pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle.pem
    pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle.pem

  }

[domain_realm]
  .realm.com = REALM
  realm.com = REALM
  jumphost.realm.com = REALM

Unter /etc/krb5.conf.d befinden sich folgende Dateien

crypto-policies  freeipa  kcm_default_ccache  sssd_enable_idp

Antwort1

bearbeitenIch schätze, ich habe mich geirrt :-)

Die SSH-Einstellungen scheinen mir in Ordnung zu sein. Ich vermute, dass das ausgestellte Ticket nicht weitergeleitet werden kann.

Zitierenman 5 krb5.conf:

Abschnitt „Libdefaults“

[...]
weiterleitbar
Wenn dieses Flag gesetzt ist, sind anfängliche Tickets standardmäßig weiterleitbar. Der Standardwert für dieses Flag ist false.

Antwort2

Ich glaube, Sie missverstehen, was die Option -J für SSH bewirkt. Sie verwendet den Jump-Host, um eine Socket-Verbindung zum endgültigen Ziel herzustellen, über die die Verbindung per Proxy geleitet wird, aber es ist immer noch der ursprüngliche Host, der Schlüssel und Authentifizierung mit dem endgültigen Ziel aushandelt. Vielleicht haben Sie mehr Glück mit etwas wie:

ssh -t jumphost 'ssh -t login'

verwandte Informationen