Eu tenho um script que executa outro script via SSH em um servidor remoto usando o sudo. No entanto, quando eu digito a senha, ela aparece no terminal. (Caso contrário, funciona bem)
ssh user@server "sudo script"
Qual é a maneira correta de fazer isso para que eu possa digitar a senha do sudo pelo SSH sem que a senha apareça enquanto digito?
ssh <user@server> sudo <script>
, como eu estava recebendo o errosudo: no tty present and no askpass program specified
Respostas:
Outra maneira é usar a
-t
opção parassh
:Veja
man ssh
:fonte
ssh -t localhost <<< "sudo touch file;"
EDIT Aparentemente, é importante que você realmente forneça o comando como um parâmetro, não através do padrão in (o que faz sentido em retrospectiva).-t
método também mostrará saída colorida de comandos que normalmente o fazem.Consegui automatizá-lo totalmente com o seguinte comando:
Vantagens:
Com relação à segurança: como Kurt disse, a execução desse comando mostrará sua senha no histórico local do bash, e é melhor salvar a senha em um arquivo diferente ou salvar o comando all em um arquivo .sh e executá-lo. NOTA: O arquivo precisa ter as permissões corretas para que somente os usuários permitidos possam acessá-lo.
fonte
-t
, mas eu não tinha lido o manual com atenção suficiente para ver que você poderia passá-lo duas vezes! É isso que estou procurando há meses! Como uma adição de segurança, simplesmente defino uma variável de senha antes de executarread -s -p "Password: " pw
, e o fizecho "$pw" | ....
. Agora eu coloquei isso em um script útil para mim :).Supondo que você não queira nenhum prompt de senha :
Exemplo
fonte
Sudo sobre SSH passando uma senha, não é necessário tty:
Você pode usar o sudo sobre ssh sem forçar o ssh a ter um pseudo-tty (sem o uso da opção ssh "-t") dizendo ao sudo para não exigir uma senha interativa e apenas pegar a senha do stdin. Você faz isso usando a opção "-S" no sudo. Isso faz com que o sudo escute a senha no stdin e pare de ouvir quando vir uma nova linha.
Exemplo 1 - Comando Remoto Simples
Neste exemplo, enviamos um
whoami
comando simples :Estamos dizendo ao sudo para não emitir um prompt e receber sua entrada do stdin. Isso faz com que a senha do sudo passe completamente silenciosa, de modo que a única resposta que você recebe é a saída
whoami
.Essa técnica tem o benefício de permitir que você execute programas através do sudo over ssh, os quais requerem entrada stdin. Isso ocorre porque o sudo está consumindo a senha na primeira linha do stdin e, em seguida, permitindo que qualquer programa executado continue a pegar o stdin.
Exemplo 2 - Comando remoto que requer seu próprio stdin
No exemplo a seguir, o comando remoto "cat" é executado através do sudo, e estamos fornecendo algumas linhas extras através do stdin para o gato remoto exibir.
A saída demonstra que a
<remote_sudo_password>
linha está sendo consumida pelo sudo e que o gato executado remotamente está exibindo as linhas extras.Um exemplo de onde isso seria benéfico é se você deseja usar o ssh para passar uma senha para um comando privilegiado sem usar a linha de comando. Digamos, se você deseja montar um contêiner criptografado remoto sobre ssh.
Exemplo 3 - Montagem de um contêiner VeraCrypt remoto
Neste script de exemplo, estamos montando remotamente um contêiner VeraCrypt através do sudo sem nenhum texto extra de solicitação:
Deve-se observar que em todos os exemplos de linha de comando acima (tudo, exceto o script), a
<< EOF
construção na linha de comando fará com que tudo que for digitado, incluindo a senha, seja gravado no arquivo .bash_history da máquina local . Portanto, é altamente recomendável que, para uso no mundo real, você o faça inteiramente por meio de um script, como o exemplo veracrypt acima, ou, se na linha de comando, coloque a senha em um arquivo e redirecione-o através do ssh.Exemplo 1a - Exemplo 1 sem senha de linha de comando local
O primeiro exemplo seria assim:
Exemplo 2a - Exemplo 2 sem senha de linha de comando local
e o segundo exemplo seria:
Colocar a senha em um arquivo separado é desnecessário se você estiver colocando a coisa toda em um script, pois o conteúdo dos scripts não termina no seu histórico. Ainda pode ser útil, no entanto, caso você queira permitir que usuários que não devem ver a senha executem o script.
fonte
cat
e canalizar os resultados no sudo? Você pode apenas usarsudo
como o principal comando remoto ssh?cat
é usada para canalizar a senha do usuário para o sudo do outro lado. Se o usuário puder executar o sudo sem uma senha, isso não será necessário, mas não sugiro essa configuração. O motivo pelo qual é canalizado é impedir que a senha seja exibida na linha de comando do sistema remoto. As linhas de comando não são seguras; qualquer usuário pode ver todas as linhas de comandops auxwww
.cat
o comando sshcat \| sudo --prompt="" -S...
. Se as-S
forçassudo
para ler a senha do stdin, o gato e o cachimbo são necessários? O comando ssh poderia ser simplesmentesudo --prompt="" -S...
?A melhor maneira é
ssh -t user@server "sudo <scriptname>"
, por exemplossh -t user@server "sudo reboot"
. Ele solicitará a senha do usuário primeiro e depois a raiz (já que estamos executando o script ou comando com privilégio de raiz.Espero que tenha ajudado e esclarecido sua dúvida.
fonte
NOPASS
na configuração em sua máquina de destino é a solução. Continue lendo em http://maestric.com/doc/unix/ubuntu_sudo_without_passwordfonte
fonte
Eu enfrentei um problema,
Então eu tentei com
não funcionou
que funcionou corretamente!
fonte
Dependendo do seu uso, obtive sucesso com o seguinte:
Isso solicitará a senha root e, em seguida, execute o comando corretamente.
fonte