Gerenciando servidores sobre ssh com PermitRootLogin = no

1

Se eu não puder usar o ssh como root para cada um dos meus servidores, como posso fazer modificações de maneira eficiente?

Eu não tenho permissão para configurar chaves ssh ou abrir o arquivo sudoers com o NOPASSWD. Não consigo instalar fantoches ou passeios no espaço.

Às vezes, quando tento incluir um comando sudo em um script, recebo o erro "no tty present". Alguém já trabalhou em um ambiente como esse?

    
por flashnode 11.06.2010 / 19:41

6 respostas

5

Você sempre pode fazer login como usuário comum e su root no usuário raiz quando estiver no servidor.

    
por 11.06.2010 / 19:46
1

Desde que você mencionou, você não pode usar autenticação de chave pública e terá que colocar uma senha apenas para passar o prompt de login inicial - Sua melhor aposta é provavelmente uma combinação de Python (ou Perl) e Expect:

#!/usr/bin/python

import pexpect

USER = 'myuser'
PASS = 'mypwd'
HOST = 'myhost'
CMD = 'ssh -l %s %s' % (USER, HOST)

conn = pexpect.spawn(CMD)
conn.expect('password:')
conn.sendline(PASS)
# do the rest of your stuff here ...

Isso deve ser suficiente como ponto de partida - há muitos tutoriais (e perguntas sobre SO) sobre esse tópico. Você poderia então 'su -' ou sudo e fornecer a mesma senha de usuário, por exemplo. Ele fornece uma estrutura para você também fazer sua própria configuração dinâmica.

Além disso, o presente no tty é porque você não abriu um tty em um script, pois eles geralmente são executados de maneira não interativa.

    
por 11.06.2010 / 19:50
1

O no tty present. significa que seu arquivo sudoers contém Defaults requiretty . Se você comentar isso, ele desaparecerá.

Eu procuraria em coletivo para o seu gerenciamento, mas parece que você não pode instalar nada. Nesse caso, prepare-se para digitar sua senha muito :( (ou, má idéia como é, script algo que coloca sua senha no lugar certo com o esperado ...)

Além disso, sudo -l fornecerá um shell de root real. Isso é bom para o gerenciamento interativo, mas não tanto para coisas automatizadas.

    
por 11.06.2010 / 23:51
1

Com essas limitações específicas, você pode forçar a alocação de tty usando a opção -t para ssh:

$ ssh server1 'sudo echo foo'
sudo: sorry, you must have a tty to run sudo
$ ssh -t server1 'sudo echo foo'
foo
Connection to server1 closed.

Neste exemplo, é nopasswd, mas funcionará, você só precisará digitar sua senha.

    
por 11.06.2010 / 19:50
0

Use um shell distribuído como mssh ou dsh

É realmente um problema não conseguir fazer login diretamente como root?

Eu sempre faço login como usuário comum e uso apenas o sudo para executar comandos administrativos.

Eu aceito que é um problema não ter controle centralizado, especialmente quando você precisa executar uma mudança em mais de um pequeno número de servidores, mas você pode usar algo como mssh ou dsh da sua máquina Linux Desktop para executar os mesmos comandos em cada servidor.

Um exemplo das etapas necessárias para conectar-se a quatro servidores e executar um comando como rota seria

  • conecte-se a todos os quatro servidores usando mssh (por exemplo, mssh host1 host2 host3 host4)

  • digite sua senha se você não tiver as chaves configuradas

  • execute sudo "comando"

  • digite sua senha novamente

Certamente você tem permissão para configurar chaves para sua própria conta de usuário comum. Além disso, você pode configurar aliases para grupos de servidores no mssh.

Então os passos se tornam triviais

  • conecte-se a um grupo ou servidores, como "servidores da web" usando mssh

  • execute sudo "comando"

  • digite sua senha.

mais algumas informações sobre meu uso de mssh aqui

    
por 11.06.2010 / 23:19
0

Você está tentando trabalhar de forma interativa ou por meio de script?

Essas políticas parecem algo de uma grande empresa ou governo. Se este for o caso, basta alguém pagar alguns milhões de dólares por uma solução de gerenciamento como a IBM / Tivoli.

    
por 11.06.2010 / 23:40