
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'