Pesquisa de site

sshpass: uma excelente ferramenta para login SSH não interativo - nunca use em servidor de produção


Na maioria dos casos, os administradores de sistema Linux fazem login em servidores Linux remotos usando SSH, fornecendo uma senha, ou login SSH sem senha, ou autenticação SSH baseada em chave.

E se você quiser fornecer uma senha junto com o nome de usuário para o próprio prompt SSH? é aqui que o sshpass vem para resgatar.

sshpass é uma ferramenta de linha de comando simples e leve que nos permite fornecer senha (autenticação de senha não interativa) para o próprio prompt de comando, para que scripts de shell automatizados possam ser executados para fazer backups por meio do agendador cron.

ssh usa acesso TTY direto para garantir que a senha seja realmente fornecida por um usuário de teclado interativo. O Sshpass executa o ssh em um tty dedicado, induzindo-o a acreditar que está recebendo a senha de um usuário interativo.

Importante: Usar sshpass é considerado o menos seguro, pois revela a senha para todos os usuários do sistema na linha de comando com um simples Comando “ps”. Eu recomendo fortemente o uso da autenticação SSH sem senha.

Instale sshpass em sistemas Linux

Em sistemas baseados em RedHat/CentOS, primeiro você precisa habilitar o repositório Epel em seu sistema para instalá-lo usando o comando yum conforme mostrado.

yum install sshpass
dnf install sshpass    [On Fedora 22+ versions]

No Debian/Ubuntu e seus derivados, você pode instalá-lo usando o comando apt-get conforme mostrado.

sudo apt-get install sshpass

Alternativamente, você pode instalar a partir do código-fonte para ter a versão mais recente do sshpass, primeiro baixe o código-fonte e depois extraia o conteúdo do arquivo tar e instale-o da seguinte forma:

wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
tar -xvf sshpass.tar.gz
cd sshpass-1.06
./configure
sudo make install 

Como usar sshpass no Linux

sshpass é usado junto com ssh, você pode visualizar todas as opções de uso de sshpass com descrições completas emitindo o comando abaixo:

sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

Como mencionei antes, sshpass é mais confiável e útil para fins de script, considere os comandos de exemplo abaixo.

Faça login no servidor ssh Linux remoto (10.42.0.1) com o nome de usuário e senha e verifique o uso do disco do sistema de arquivos do sistema remoto, conforme mostrado.

sshpass -p 'my_pass_here' ssh [email  'df -h' 

Importante: Aqui, a senha é fornecida na linha de comando, o que é praticamente inseguro e o uso desta opção não é recomendado.

No entanto, para evitar a exibição da senha na tela, você pode usar o sinalizador -e e inserir a senha como um valor da variável de ambiente SSHPASS conforme abaixo:

export SSHPASS='my_pass_here'
echo $SSHPASS
sshpass -e ssh [email  'df -h' 

Nota: No exemplo acima, a variável de ambiente SSHPASS é apenas para fins temporários e será removida durante a reinicialização.

Para definir permanentemente a variável de ambiente SSHPASS, abra o arquivo /etc/profile e digite a instrução export no início do arquivo:

export SSHPASS='my_pass_here'

Salve o arquivo, saia e execute o comando abaixo para efetuar as alterações:

source /etc/profile 

Por outro lado, você também pode usar a flag -f e colocar a senha em um arquivo. Dessa forma, você pode ler a senha do arquivo da seguinte forma:

sshpass -f password_filename ssh [email  'df -h'

Você também pode usar sshpass para transferir arquivos usando scp ou fazer backup/sincronizar arquivos por rsync usando SSH, conforme mostrado:

------- Transfer Files Using SCP ------- 
scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html

------- Backup or Sync Files Using Rsync -------
rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

Para mais uso, sugiro que você leia a página de manual sshpass, digite:

man sshpass

Neste artigo, explicamos o sshpass, uma ferramenta simples que permite autenticação de senha não interativa. Embora essas ferramentas possam ser úteis, é altamente recomendável usar o mecanismo de autenticação de chave pública mais seguro do ssh.

Por favor, deixe uma pergunta ou comentário através da seção de feedback abaixo para quaisquer discussões futuras.