ssh efetue login como usuário e mude para root, sem sudo

1

Eu tenho a seguinte tarefa:

  • o comando deve ser executado como root no servidor remotamente no script bash sobre ssh e a saída do comando deve ser buscada na variável.
  • o registro em log do ssh como root está desativado.
  • o sudo no servidor está desativado, portanto, preciso usar su.
  • EDIT: como quero torná-lo o mais automatizado possível no bash, a senha deve ser armazenada dentro do comando

Eu pesquisei por dias, mas parece que não consigo encontrar uma solução para isso.

Solução proposta aqui: ssh to server e mude o usuário e mude um diretório

    ssh -t username@hostname "sudo su - otheruser -c \"cd /path/to/directory && command\""

não funciona porque o sudo está desativado no servidor:

Alguém tem uma solução para isso?

    
por spaceman117X 06.04.2018 / 18:25

3 respostas

2

Talvez um pouco fora do tópico, mas isso pode ser feito com o Python e o módulo paramiko :

#!/usr/bin/python2

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('127.0.0.1', port=22, username='user', password='pass')

stdin, stdout, stderr = ssh.exec_command('su')
stdin.write('root_password_goes_here\n')

[ add extra code here to execute a command ]

stdin.flush()
print (stdout.readlines())
ssh.close()

Deve-se notar que o armazenamento de senhas no script geralmente é uma má ideia do ponto de vista da segurança. Verifique se você tem as permissões adequadas definidas no script (por exemplo, chmod 740)

    
por 09.04.2018 / 09:30
2

Faça login via SSH (como usuário sem privilégios) e, em seguida, execute o comando su sem nenhum argumento para alterar para o usuário raiz. Você precisará da senha de root para fazer isso. Em seguida, execute os comandos que você deseja executar.
EDIT: Se você quiser fazer isso em uma linha, poderá usar o seguinte:
ssh username@hostname "su -c \"code_here\""
Se isso não funcionar, verifique se a senha raiz está ativada executando passwd como root. Isso solicitará uma nova senha de root.
Extra: Para executar um comando como outro usuário além do root (Observe que isso requer a senha do usuário de destino):
ssh username@hostname "su - username_of_target -c \"code_here\""

    
por 06.04.2018 / 18:30
0

Então, depois de 4 horas de rastreamento adicional, finalmente consegui! Grande obrigado por @ jeroen-it-nerdbox por me dar insights sobre isso:

A tarefa consistia em obter dados do smartctl (que requer credenciais raiz), do servidor com o ssh-root desativado e do sudo desativado. Obviamente, isso também funcionará com sudo em vez de su.

aqui está o código completo viável em Python com a implementação do Paramiko.

#!/usr/bin/python2

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('rootserver.domain.com', port=22, username='admin', password='adminpass')

stdin, stdout, stderr = ssh.exec_command('/bin/su root -c "smartctl -a /dev/sda > /tmp/smartctl_output"', get_pty=True)
stdin.write('rootpass\n')

stdin.flush()
print (stdout.readlines())
ssh.close()
    
por 09.04.2018 / 16:06

Tags