Autenticação SSH usando gssapi-keyex ou gssapi-with-mic (chave pública não permitida)

15

Minha empresa desativou a autenticação de chave pública SSH, portanto, tenho que inserir manualmente cada vez que minha senha (não devo alterar /etc/ssh/sshd_config).

No entanto gssapi-keyexe gssapi-with-micautenticações são habilitados (veja abaixo ssha saída de depuração).

Como eu poderia usar o login automático neste caso?
Posso explorar gssapi-keyexe / ou gssapi-with-micautenticações?

> 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
fonte
1
O tecido do Python faz um ótimo trabalho ao lidar com a automação ssh.
Dan Garthwaite
Olá, @DanGarthwaite Você usa o Fabric para fazer login manualmente em outros servidores remotos? Por favor, você pode explicar como o usa. Por favor, forneça uma resposta. Cheers
olibre
3
Se você não estiver em um domínio Kerberos (ou domínio do Active Directory), é improvável que o GSSAPI seja útil para você. Dito isto, desabilitar a autenticação de chave pública parece um absurdo.
Michael Hampton
1
O @olibre Fabric é um utilitário para executar comandos em um ou mais servidores via SSH. Esses comandos geralmente são organizados em um "fabfile", como um Makefile. Ele faz um trabalho extremamente bom em fazer o SSH desaparecer (depois que você se autentica) e lida com todas as diversas maneiras pelas quais clientes e servidores SSH tendem a interromper o controle. Um tutorial rápido está disponível: docs.fabfile.org/en/1.7/tutorial.html
Dan Garthwaite
Por favor, @ DanGarthwaite, você poderia dar um exemplo de um fabarquivo que faria login em outra máquina (SSH gssapi sem solicitar uma senha) e abrir um shell? Você pode fornecer dentro de uma resposta. (Em cinco minutos, não encontrei no tutorial como fazer isso). Cheers;)
olibre 10/09

Respostas:

19

Talvez.

  • Você pode obter um ticket para seu principal no sistema do cliente como parte do processo de login padrão ou manualmente ( kinit, MIT Kerberos for Windows)?
  • O servidor possui um kerberos principal ou você pode fornecer um? Deve ser da forma host/[email protected].
  • A GSSAPIautenticação está ativada no seu cliente?
  • Seu cliente sabe a qual região o servidor pertence pelo registro de recurso DNS TXT ou pelo mapeamento local?

Se você disse "sim" a todas as opções acima, parabéns, você pode usar GSSAPIAuthentication.

  • Também pode ser necessário habilitar a delegação de credenciais, dependendo da sua configuração.

Etapas de teste:
(Assumindo: domínio = exemplo.com; domínio = EXAMPLE.COM)

  1. kinit [email protected]
    • Idealmente, isso é tratado pelo seu processo de login padrão, incluindo pam_krb5ou pam_sss(com auth_provider = krb5) no apropriado pam stack.
  2. kvno host/[email protected]
    • Esta é uma etapa de depuração. sshfaz isso automaticamente se você tiver um cache válido e estiver conversando com um sshdque suporta gssapi-with-micou gssapi-keyex.
  3. dig _kerberos.example.com txt deve retornar "EXAMPLE.COM"
    • Como alternativa, o mapeamento pode ser armazenado na [domain_realm]seção /etc/krb5.confas .example.com = EXAMPLE.COM, mas o dnsmétodo é muito melhor.
  4. ssh -o GSSAPIAuthentication=yes [email protected]
    • Para fazer login em um nome de usuário que não seja o seu principal no servidor, é necessário saber mapear os detalhes dos quais não estou entrando aqui.
84104
fonte
Oi. Já lhe dei +1 há algum tempo, mas, na verdade, não sei como verificar seus quatro pontos. (Eu não sou um administrador, apenas um desenvolvedor). Por favor, você poderia fornecer uma linha de comando para verificar a conexão SSH usando gssapiauthentication? Talvez eu também possa usar gssapiauthenticationna minha máquina Linux. (eu deveria usar kinitpara isso?) Felicidades;)
olibre
5

O método de quatro etapas está correto (também existem registros SRV Kerberos no DNS que são ainda mais elegantes e estão presentes em todos os Active Directory). Eu uso isso o tempo todo e tenho defendido os métodos pubkey acima, principalmente por razões relacionadas a segurança e controle.

Dito isto, isso só fornece logon interativo, embora possa ser quase interativo quando você recebe um ticket na sua estação de trabalho. O tíquete Kerberos age como o agente SSH; depois que você o tiver, novas conexões serão instantâneas e sem senha; embora com um prazo.

Para obter o logon em lote interativo, é necessário obter um arquivo keytab, um arquivo que contém essencialmente a senha de uma conta Kerberos, como a metade privada de uma chave SSH. De acordo com as precauções de segurança; especialmente porque o keytab não é criptografado ou protegido com uma senha.

Estou bastante relutante em fornecer aos meus usuários seus keytabs para suas contas pessoais, mas estou usando agressivamente contas de serviço com permissões mínimas para vários trabalhos em lotes, especialmente quando é essencial que credenciais sejam delegadas ao sistema remoto, algo que pubkey simplesmente pode ' t alcançar.

Os keytabs podem ser criados usando o ktutil no Unix ou o KTPASS.EXE no Windows (o último dos serviços do AD Kerberos). Observe que o ktutil existe em dois tipos, Heimdal e MIT, e sua sintaxe é diferente. A leitura da página de manual em um sistema relevante ajuda.

mansaxel
fonte