É possível passar senhas em um script de shell?

11

Há muito tempo que estou procurando isso, gostaria de saber se é possível passar senhas em um script de shell? Muitas das respostas retornaram sem. Recentemente, li um artigo afirmando que como passar senhas em um script de shell. Eu tentei isso, mas não parece funcionar. Este é o link . Alguém pode fazer check-out e reverter? Também os pls dizem que existe uma maneira de passar senhas em um script de shell? Se nenhum pls me dizer como o linux obtém a entrada para a senha?

karthick87
fonte

Respostas:

12

Ao "digitar senhas", você provavelmente quer dizer inserir dados sem estar visível para o usuário.

(sugerido por geirha) Ao usar o bash, você pode usar a -sopção para impedir que caracteres digitados sejam exibidos:

read -p "Password please: " -s pass

Como alternativa, altere o comportamento do terminal para ocultar os caracteres digitados com stty -echo(desativar echo). Após ler a senha com o shell incorporado readem uma variável (no exemplo abaixo $pass), ligue-a novamente com stty echo. Como a nova linha de Enterestá oculta, você deve imprimir uma nova linha para obter saída futura em uma nova linha.

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

reade printfsão embutidos no shell. sttyé fornecido pelo coreutilspacote que é instalado por padrão. Isso significa que esse trecho é muito portátil.

Nota: a -popção não é padrão, mas a partir de bash. Se você precisar exibir um prompt em outros shells, use:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

Referências:

Lekensteyn
fonte
Eu só quero dar a senha root do sistema remoto no script. Isso é possível no seu caso?
karthick87
@ karthick87: não, este script apenas captura os dados digitados pelo usuário interativamente. Se você deseja inserir senhas raiz em scripts, por que não considera os logins baseados em chaves?
Lekensteyn
1
A leitura do Bash também tem uma opção para desativar o eco durante a leitura na linha. Veja help '\read'.
precisa saber é o seguinte
Em zshque é através realizável read -s 'pw?Prompt text', onde pwé uma variável que password vai ser colocado e -sé uma bandeira para ocultar a entrada.
Baldrs
2

Para qual programa você deseja passar uma senha?

O script no link funciona para mim. Observe que não é um script de shell, mas um script de expectativa (precisa que o pacote expectseja instalado`). O uso de expect é uma maneira comum de automatizar programas interativos baseados em texto.

Os sshlogins não interativos geralmente são feitos usando a autenticação baseada em chave com uma frase secreta vazia.

Alguns outros programas (como sudo) têm opções para ler uma senha do stdin.

Fornecer uma senha como uma opção de linha de comando geralmente é um problema de segurança, pois na maioria dos sistemas, qualquer usuário pode ver outros processos de usuários, incluindo os argumentos de linha de comando, usando ferramentas simples como ps.

Florian Diesch
fonte
Eu só quero passar uma senha para o programa ssh.
karthick87
Talvez a autenticação por chave funcione para você: use ssh-keygenpara criar uma chave de autenticação (basta pressionar Enter quando for solicitada uma frase secreta) e copiá-la para o usuário remoto usando ssh-copy-id. Se a autenticação por chave estiver ativada para o sshd (por padrão), o ssh será não pedir uma senha.
Florian Diesch
1

Um script nunca deve realmente lidar com senhas. Faça com que o aplicativo que precise da senha solicite a senha ou, se isso não for possível, encontre um meio melhor de se autenticar com o aplicativo. Por favor, leia http://mywiki.wooledge.org/BashFAQ/069

Geirha
fonte
0

Existe uma maneira de armazenar senhas em um script bash, mas você precisa criptografar o script para que ninguém possa lê-lo ou executar qualquer tipo de depurador para ver exatamente o que está fazendo. Para criptografar um script bash / shell e executá-lo, tente copiar e colar aqui

Na página acima, tudo o que você precisa fazer é enviar seu script (você pode enviar um exemplo de script primeiro para sua tranquilidade). Um arquivo zip será gerado para você. Clique com o botão direito do mouse no link de download e copie o URL fornecido. Em seguida, vá para sua caixa UNIX e execute as seguintes etapas.

Instalação:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

O que o comando de instalação acima fará por você é:

  1. Vai instalar o script criptografado no diretório /var/tmp/KINGLAZY/SHIELDX-(your-script-name).

  2. Ele colocará um link para esse script criptografado no diretório que você especificar em substituição /home/(your-username)- dessa forma, permitirá que você acesse facilmente o script sem precisar digitar o caminho absoluto.

  3. Garante que ninguém possa modificar o script - Qualquer tentativa de modificar o script criptografado o tornará inoperante ... até que essas tentativas sejam interrompidas ou removidas.

  4. Garante absolutamente NINGUÉM pode fazer cópias dele. Ninguém pode copiar seu script para um local isolado e tentar mexer com ele para ver como funciona. Todas as cópias do script devem ser links para o local original especificado durante a instalação.

NOTA:

Não acredito que isso funcione para scripts interativos que solicitam uma resposta ao usuário. Os valores devem ser codificados no script. A criptografia garante que ninguém possa realmente ver esses valores, assim você não precisa se preocupar com isso.

SimplifiedWorkings
fonte
-1

você pode simplesmente fazer algo assim.

# echo -e "password_here\npassword_here" | su user

fonte

fromnaboo
fonte