Authentification SSH à l'aide de gssapi-keyex ou gssapi-with-mic (publickey non autorisé)

15

Mon entreprise a désactivé l'authentification par clé publique SSH, je dois donc saisir manuellement chaque fois mon mot de passe (je ne suis pas censé changer /etc/ssh/sshd_config).

Cependant gssapi-keyex, les gssapi-with-micauthentifications sont activées (voir ci-dessous la sshsortie de débogage).

Comment pourrais-je utiliser la connexion automatique dans ce cas?
Puis-je exploiter gssapi-keyexet / ou gssapi-with-micauthentifier?

> ssh -v -o PreferredAuthentications=publickey hostxx.domainxx
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to hostxx.domainxx [11.22.33.44] port 22.
debug1: Connection established.
debug1: identity file /home/me/.ssh/identity type -1
debug1: identity file /home/me/.ssh/id_rsa type -1
debug1: identity file /home/me/.ssh/id_dsa type 2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'hostxx.domainxx' is known and matches the RSA host key.
debug1: Found key in /home/me/.ssh/known_hosts:2
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: gssapi-keyex,gssapi-with-mic,password
debug1: No more authentication methods to try.
Permission denied (gssapi-keyex,gssapi-with-mic,password).
olibre
la source
1
La structure de Python fait un excellent travail pour gérer l'automatisation ssh.
Dan Garthwaite
Salut @ DanGarthwaite Utilisez-vous Fabric pour vous connecter manuellement à d'autres serveurs distants? Veuillez expliquer comment vous l'utilisez. Veuillez fournir une réponse. Vive
olibre
3
Si vous n'êtes pas dans un domaine Kerberos (ou domaine Active Directory), il est peu probable que GSSAPI vous soit utile. Cela dit, la désactivation de l'authentification par clé publique semble assez absurde.
Michael Hampton
1
@olibre Fabric est un utilitaire pour exécuter des commandes sur un ou plusieurs serveurs via SSH. Ces commandes sont généralement organisées dans un "fabfile", comme un Makefile. Il fait un très bon travail pour faire disparaître SSH (une fois que vous vous authentifiez) et gère toutes les nombreuses façons dont les clients et serveurs SSH ont tendance à interrompre le contrôle. Un tutoriel rapide est disponible: docs.fabfile.org/en/1.7/tutorial.html
Dan Garthwaite
Veuillez @DanGarthwaite, pourriez-vous donner un exemple de fabfichier qui se connecterait à une autre machine (SSH gssapi sans demander de mot de passe) et ouvrirait un shell? Vous pouvez le fournir dans une réponse. (En cinq minutes, je n'ai pas trouvé dans le tutoriel comment faire cela).
Santé

Réponses:

19

Peut être.

  • Pouvez-vous obtenir un ticket pour votre principal sur votre système client dans le cadre du processus de connexion standard ou manuellement ( kinit, MIT Kerberos pour Windows)?
  • Le serveur a-t-il un principal kerberos ou pouvez-vous lui en donner un? Il devrait être de la forme host/[email protected].
  • L' GSSAPIauthentification est-elle activée sur votre client?
  • Votre client sait-il à quel domaine le serveur appartient, soit par enregistrement de ressource DNS TXT, soit par mappage local?

Si vous avez dit «oui» à tout ce qui précède, alors félicitations, vous pouvez utiliser GSSAPIAuthentication.

  • Vous devrez peut-être également activer la délégation des informations d'identification, selon votre configuration.

Étapes de test:
(en supposant: domaine = exemple.com; domaine = EXAMPLE.COM)

  1. kinit [email protected]
    • Idéalement, cela est géré par votre processus de connexion standard en incluant soit ( pam_krb5ou ) pam_sssavec auth_provider = krb5le approprié pam stack.
  2. kvno host/[email protected]
    • Il s'agit d'une étape de débogage. sshle fait automatiquement si vous avez un cache valide et que vous parlez à un sshdqui prend en charge gssapi-with-micou gssapi-keyex.
  3. dig _kerberos.example.com txt devrait revenir "EXAMPLE.COM"
    • Alternativement, le mappage pourrait être stocké dans la [domain_realm]section de /etc/krb5.confas .example.com = EXAMPLE.COM, mais la dnsméthode évolue beaucoup mieux.
  4. ssh -o GSSAPIAuthentication=yes [email protected]
    • Pour vous connecter à un nom d'utilisateur autre que celui de votre principal sur le serveur, il faudra savoir pour le mapper les détails dont je ne rentre pas ici.
84104
la source
Salut. Je vous ai donné +1 il y a quelque temps, mais en fait, je ne sais pas comment vérifier vos quatre points. (Je ne suis pas administrateur, juste développeur). Veuillez fournir une ligne de commande pour vérifier la connexion SSH à l'aide de gssapiauthentication? Peut-être que je peux également l'utiliser gssapiauthenticationsur ma machine Linux. (devrais-je utiliser kinitpour ça?) Cheers;)
olibre
5

La méthode en 4 étapes est correcte (il existe également des enregistrements Kerberos SRV dans DNS qui sont encore plus élégants et sont présents dans chaque Active Directory). J'utilise cela tout le temps et je préconise ces méthodes de pubkey ci-dessus pour des raisons principalement liées à la sécurité et au contrôle.

Cela dit, cela ne donne qu'une connexion interactive, bien qu'elle puisse être quasi-interactive une fois que vous avez obtenu un ticket sur votre poste de travail. Le ticket Kerberos agit un peu comme l'agent SSH; une fois que vous l'avez, les nouvelles connexions sont instantes et sans mot de passe; mais avec une limite de temps.

Pour obtenir une connexion par lots interactive, vous devez obtenir un fichier keytab, un fichier qui contient essentiellement le mot de passe d'un compte Kerberos, un peu comme la moitié privée d'une clé SSH. Selon les précautions de sécurité applicables; d'autant plus que le keytab n'est pas chiffré ou protégé par un mot de passe.

Je suis assez réticent à fournir à mes utilisateurs leurs keytabs pour leurs comptes personnels, mais j'utilise de manière agressive des comptes de service avec des autorisations minimales pour divers travaux par lots, en particulier lorsqu'il est essentiel que les informations d'identification soient déléguées au système distant, quelque chose que pubkey peut tout simplement '' t atteindre.

Les keytabs peuvent être créés en utilisant ktutil sous Unix ou KTPASS.EXE sous Windows (ce dernier à partir des services AD Kerberos). Notez que ktutil existe en deux versions, Heimdal et MIT, et leur syntaxe diffère. La lecture de la page de manuel sur un système pertinent est utile.

Mansaxel
la source