Preciso criar um script que insira automaticamente uma senha para o ssh
cliente OpenSSH .
Digamos que eu precise fazer o SSH myname@somehost
com a senha a1234b
.
Eu já tentei ...
#~/bin/myssh.sh
ssh myname@somehost
a1234b
... mas isso não funciona.
Como posso obter essa funcionalidade em um script?
ps -aux
, normalmente você não deve executar comandos digitando sua senha, porque outros usuários no mesmo computador poderão ver a senha executandops -aux
. se for prático, você também deseja usar a autenticação de chave pública, como mencionado na outra resposta. isso permite que você separe as informações de autenticação do seu script para poder compartilhá-lo com outras pessoas, sem preocupações, e depois decidir ativar a criptografia na sua pasta ~ / .ssh sem também criptografar o script.sshpass
.Depois de procurar uma resposta para a pergunta por meses, finalmente encontrei uma solução melhor: escrever um script simples.
Coloque
/usr/bin/exp
, então você pode usar:exp <password> ssh <anything>
exp <password> scp <anysrc> <anydst>
Feito!
fonte
Use a autenticação de chave pública: https://help.ubuntu.com/community/SSH/OpenSSH/Keys
No host de origem, execute isso apenas uma vez:
Isso é tudo, depois disso você poderá fazer o ssh sem senha.
fonte
Você pode usar um script esperado. Eu não escrevi um há algum tempo, mas deve se parecer com abaixo. Você precisará encabeçar o script com
#!/usr/bin/expect
fonte
/bin/myssh.sh: 2: spawn: not found /bin/myssh.sh: 3: expect: not found /bin/myssh.sh: 4: send: not found /bin/myssh.sh: 5: expect: not found /bin/myssh.sh: 6: send: not found
which expect
#!/usr/bin/env expect
interact
ao fim de modo a sessão ssh é realmente interativoVariante I
Variante II
fonte
-p
sinalizador é para especificar um número de porta.SYNOPSIS sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
yum -y install epel-release
e depoisyum -y install sshpass
sshpass + autossh
Um bom bônus do já mencionado
sshpass
é que você pode usá-loautossh
, eliminando ainda mais a ineficiência interativa.Isso permitirá a reconexão automática se, por exemplo, seu wifi for interrompido, fechando o seu laptop.
fonte
-f
para autossh nesta combinação, poiswhen used with autossh, ssh will be *unable* to ask for passwords or passphrases.
harding.motd.ca/autossh/README.txt também superuser.com/questions/1278583/...sshpass
com melhor segurançaEu tropecei nesse segmento enquanto procurava uma maneira de ssh em um servidor atolado - demorou um minuto para processar a tentativa de conexão SSH, e atingi o tempo limite antes que eu pudesse inserir uma senha. Nesse caso, eu queria poder fornecer minha senha imediatamente quando o prompt estivesse disponível.
(E se não for muito claro: com um servidor nesse estado, é tarde demais para configurar um login de chave pública.)
sshpass
para o resgate. No entanto, existem maneiras melhores de fazer isso do quesshpass -p
.Minha implementação pula diretamente para o prompt de senha interativa (sem perda de tempo, verificando se pode ocorrer troca de chave pública) e nunca revela a senha como texto sem formatação.
fonte
trap
para evitar ctrl-C de vazar aSSHPASS
variávelPreferredAuthentications=keyboard-interactive
não funcionava, mas substituí-lo porPreferredAuthentications=password
funcionou.É assim que eu faço login nos meus servidores.
#! / bin / bash
sshpass -p minha senha ssh root @ $ 1
E portanto ...
fonte
referência: https://www.linkedin.com/pulse/youre-doing-wrong-ssh-plain-text-credentials-robert-mccurdy?trk=mp-reader-card
fonte
Eu não acho que vi alguém sugerir isso e o OP acabou de dizer "script", então ...
Eu precisava resolver o mesmo problema e minha linguagem mais confortável é Python.
Eu usei a biblioteca paramiko. Além disso, eu também precisava emitir comandos para os quais eu precisaria de permissões escaladas usando
sudo
. Acontece que o sudo pode aceitar sua senha via stdin através da bandeira "-S"! Ver abaixo:Espero que isso ajude alguém. Meu caso de uso foi criar diretórios, enviar e descompactar arquivos e iniciar programas em ~ 300 servidores por vez. Como tal, a automação foi fundamental. Eu tentei
sshpass
,expect
e depois criei isso.fonte
Eu consegui isso da seguinte maneira
.ssh / config foi modificado para eliminar o prompt sim / não - estou atrás de um firewall, portanto não estou preocupado com chaves ssh falsificadas
Crie um arquivo de resposta para expect, por exemplo, answer.expect
Crie seu script bash e chame apenas expect no arquivo
Obtém 128 dados do hadoop atualizados com a nova configuração - assumindo que você esteja usando uma montagem NFS para os arquivos hadoop / conf
Espero que isso ajude alguém - eu sou um Windows entorpecido e isso me levou cerca de 5 horas para descobrir!
fonte
Se você estiver fazendo isso em um sistema Windows, poderá usar o Plink (parte do PuTTY).
fonte
Eu tenho uma solução melhor que inclui o login com sua conta do que mudar para usuário root. É um script bash
http://felipeferreira.net/index.php/2011/09/ssh-automatic-login/
fonte
A resposta do @abbotto não funcionou para mim, teve que fazer algumas coisas de maneira diferente:
fonte
Eu consegui fazê-lo funcionar com isso:
fonte
No exemplo abaixo, escreverei a solução que usei:
O cenário: quero copiar o arquivo de um servidor usando o script sh:
fonte
Use esse script para lançar dentro do script, o primeiro argumento é o nome do host e o segundo será a senha.
fonte
Para conectar uma máquina remota através de scripts shell, use o comando abaixo:
onde
IPADDRESS
,USERNAME
ePASSWORD
são valores de entrada que precisam fornecer no script, ou se queremos proporcionar em uso runtime "ler" de comando.fonte
StrictHostKeyChecking=no
sem explicar as consequências.pressione a tecla enter e digite a senha do seu sistema e, finalmente, digite a senha do servidor
fonte