Como automatizar o login SSH com senha?

337

Como automatizar o login SSH com senha? Estou configurando minha VM de teste, portanto, segurança pesada não é considerada. SSH escolhido para segurança aceitável com configuração mínima.

ex)

echo password | ssh id@server

Isso não funciona.

Eu lembro que fiz isso com alguns truques que alguém me guiou, mas não me lembro agora do truque que usei ...

    
por Eonil 01.03.2011 / 11:07

8 respostas

306

Não use uma senha. Gere uma chave SSH passphraseless e envie-a para sua VM.

Se você já tem uma chave SSH, pode pular esta etapa ... Basta pressionar Enter para a chave e as duas senhas:

$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.

Copie suas chaves para o servidor de destino:

$ ssh-copy-id id@server
id@server's password: 

Agora tente fazer login na máquina com ssh 'id@server' e faça o check-in:

.ssh/authorized_keys

para garantir que não adicionamos chaves extras que você não esperava.

Por fim, verifique o registro em log…

$ ssh id@server

id@server:~$ 

Você também pode querer usar ssh-agent se quiser tentar manter suas chaves protegidas com uma frase secreta.

    
por 01.03.2011 / 11:17
506
$ sudo apt-get install sshpass
$ sshpass -p your_password ssh user@hostname
    
por 31.05.2013 / 09:08
58

Enquanto a resposta correta para sua pergunta é sshkey , há uma maneira mais segura - chaves SSH. Você está apenas a três etapas fáceis de distância da solução:

Gere um par de chaves rsa :

# ssh-keygen

copie-o no servidor com um comando simples :

# ssh-copy-id userid@hostname

agora você pode fazer login sem senha :

# ssh userid@hostname
    
por 14.11.2011 / 12:57
27

Use esperar:

#!/usr/bin/expect -f
#  ./ssh.exp password 192.168.1.11 id
set pass [lrange $argv 0 0]
set server [lrange $argv 1 1]
set name [lrange $argv 2 2]

spawn ssh $name@$server
match_max 100000
expect "*?assword:*"
send -- "$pass\r"
send -- "\r"
interact

Exemplo:

# ./1.ex password localhost ooshro
spawn ssh ooshro@localhost
ooshro@localhost's password: 
Linux ubuntu-1010-server-01 2.6.35-25-generic-pae #44-Ubuntu SMP Fri Jan 21 19:01:46 UTC 2011 i686 GNU/Linux
Ubuntu 10.10

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/
Last login: Tue Mar  1 12:41:12 2011 from localhost
    
por 01.03.2011 / 11:08
11

Isso pode não ser útil para você, mas você pode fazer isso com o Perl:

\#!/usr/bin/perl  
use warnings;  
use strict;  

use Net::SSH::Perl;  
my $host = 'remote.serv.er';  
my $user = 'root';  
my $pass = 'hunter2';  
my $ssh = Net::SSH::Perl->new('$host');  
$ssh->login('$user', '$pass') or die "Oh noes! $!";
    
por 01.03.2011 / 11:52
9

Você não quer usar chaves SSH em vez de senhas? Dessa forma, é seguro e automático.

    
por 01.03.2011 / 11:14
7

Estou surpreso que ninguém tenha mencionado plink do pacote putty-tools no Ubuntu:

plink user@domain -pw mypass  [cmd]

Ele também está disponível no Windows e a sintaxe é mais compatível com o cliente openssh.

    
por 09.07.2018 / 13:15
0

Dependendo das suas necessidades de automação, talvez a Ansible seja uma boa opção para você. Ele pode gerenciar bem as coisas, como solicitar senha, solicitar a senha do sudo, várias maneiras de alterar o uso, usar com segurança segredos criptografados (cofre).

Se isso não for adequado, sugiro Esperar, conforme sugerido em outra resposta.

    
por 22.11.2018 / 08:30