Automatize o login do su sem prompt de senha

4

Eu estou escrevendo um script de shell onde eu quero automatizar o processo Reinicie o serviço em vários servidores Unix. Eu como um usuário normal não tenho direitos para executar comandos de reinicialização de serviços. Apenas s_user tem direitos para executá-los.

Procedimento para reiniciar os serviços:

  1. Faça login no servidor com meu nome de usuário e senha.
  2. Para executar o serviço de reinicialização, preciso alternar o usuário para s_user usando o comando abaixo: (preciso deste comando sem prompt de senha)

    sudo su - s_user 
    

O comando acima solicita a senha onde eu fornecerei minha senha para reiniciar os serviços. Este procedimento eu tenho que fazer em todos os servidores. Eu quero pular o prompt de senha, fornecendo a senha para su através stdin.

Os seguintes comandos que experimentei até agora:

1.   echo 'password'|sudo -S su -c " .../bin/services stop" 
Output:
[sudo]password for abc.xyz: Sorry, user abc.xyz is not allowed to execute '/bin/su - s_user' -c /bin/services stop' as root on [Servername]                        

No comando acima eu dei minha senha. Eu também tentei dar a senha s_user, mas dá a saída abaixo:

[sudo]password for abc.xyz: Sorry,try again.
[sudo]password for abc.xyz:
sudo:pam_authenticate:Conversation error

Substitui "su" por "u" no comando abaixo, mas ainda estou recebendo o mesmo erro de saída do primeiro comando.

2.  echo 'password'|sudo -S u -c " .../bin/services stop" 

Eu forneci s_user no comando abaixo, mas ainda estou recebendo o mesmo erro de saída que o primeiro comando.

3.  echo 'password'|sudo -S su - s_user -c ".../bin/service stop" 

Em seguida, tentei o comando abaixo.

4.  echo 'my password'|su -c ".../bin/services stop" -s /bin/sh abc.xyz
Output:
Standard in must be a tty

Eu também tentei o comando abaixo.

5.  su -c "command_to_restart_the_services" -s /bin/sh abc.xyz 

Eu posso executar o comando com sucesso.

6.  echo password|sudo -S su - user-to-switch
    sudo -S su - user-to-switch

O comando acima ainda pede a senha.

Restrições:

• Não consigo usar “esperar” , ele não está instalado nas minhas máquinas.

• Não consigo editar o arquivo "sudoer" . Eu não tenho direitos.

    
por Arshad Sahail 20.08.2016 / 20:51

3 respostas

1

Uma maneira de fazer isso é usar o ssh.

Usando o ssh-copy-id, você pode armazenar a autenticação:

ssh-copy-id [email protected]

(se nenhuma chave tiver sido definida, use ssh-keygen para gerar uma)

Em seguida, você pode usar o ssh em vez do comando sudo para executar o comando sem senha:

ssh [email protected] " .../bin/services stop"
    
por 20.08.2016 / 21:21
1

Vejo que você está usando sudo para se tornar root e, em seguida, su para se tornar s_user . Para fazer isso, você usará sua senha (por sudo ). Você não precisa da senha para s_user .

Você pode fazer isso adicionando sua chave ssh à conta s_user , mas acho que essa solução, neste caso, está abaixo do ideal.

Primeiramente, mostrarei que você não precisa de su , e é melhor não usá-lo. Então, em vez de sudo su - s_user -c command , faça sudo -u s_user command . Você ainda será solicitado para a sua senha. No entanto, agora você pode configurar /etc/sudoers

Adicione um arquivo /etc/sudoers.d/s_commands , contendo algo como (mas marcado, com /usr/bin/visudo ):

Cmnd_Alias S_COMMAND=/usr/bin/command, /usr/bin/anotherCommand
%s_group ALL = (s_user) NOPASSWD : S_COMMAND

Isto irá permitir a senha menos uso desses comandos, como s_user, mas apenas para usuários no grupo s_group (você terá que adicionar o grupo).

Em seguida, configure um alias de shell, algo como: alias s_command="sudo -u s_user command" .

Notas:

  • su usa a senha do usuário para o qual você está alternando.
  • sudo , por padrão, pega a senha do usuário que você é (você está mudando).
  • sudo não lê a senha do stdin, lê de tty.
por 04.07.2018 / 01:47
0

Esta não é exatamente a resposta para sua pergunta, mas pode ser uma solução para sua tarefa.

Suponho que você saiba a senha do s_user em todos os servidores, e há sshd instalado nesses servidores (e funciona como esperado; depende do sistema operacional executado nos servidores).

Como mpromonet afirmou, você pode usar ssh, mas sem fazer login nos servidores com suas próprias credenciais.

No seu computador:

Primeiro, gere seu próprio par de chaves com ssh-keygen . Isso será armazenado no diretório ~ / .ssh por padrão.

Em seguida, para cada servidor envolvido, chame ssh-copy s_user@<server> ; você será perguntado pela senha do s_user no servidor.

Agora, para verificar se tudo correu bem, basta tentar ssh s_user@<server> . Se isso funcionar sem ser solicitada uma senha, o seu feito.

No seu script (no seu computador local), você pode ligar agora

ssh s_user@<server> "whatever-command-you-need-to-run"

sem precisar de senhas.

Rem .: Eu supus aqui que o seu computador local também roda um sistema operacional similar ao UN * X. Se você estiver executando o Windows, poderá usar os programas que vêm com o putty packet for Windows.

    
por 21.08.2016 / 23:01

Tags