Ignora o prompt de senha ssh de um script de shell

4

Eu tenho um script de shell que faz ssh em um servidor usando a autenticação de chave pública e executa um comando nessa máquina. Isso funciona bem em máquinas onde os usuários instalaram a chave pública no servidor. Se esse script for executado em uma máquina em que o usuário não configurou a chave de autenticação, o script ficará preso no prompt de senha. Eu quero meu script para continuar em vez de ficar preso no prompt. Como posso ignorar o prompt? Eu estou em um Mac OSX. O servidor também está executando o OSX

    
por smokinguns 30.05.2012 / 01:05

2 respostas

12

Uma maneira de fazer isso é especificar -o PasswordAuthentication=No como parte do seu comando SSH:

ssh -o PasswordAuthentication=no user@server

Isso remove PasswordAuthentication da lista de opções de autenticação que o cliente SSH tem para conversar com o servidor, evitando que você fique no prompt de senha. Observe que isso também permite que outros mecanismos de autenticação diferentes de PubkeyAuthentication funcionem (RHostsRSAAuthentication, etc). Se você quiser usar apenas o PubkeyAuthentication ...

ssh -o PreferredAuthentications=publickey user@server

    
por 30.05.2012 / 01:17
3

Você pode escrever um script de shell no qual você pode fornecer a senha que fará login automático no servidor ssh.

Mas você deve ter o pacote esperado instalado para este script.

No Redhat, o pacote expect vem por padrão. Mas no Ubuntu você tem que instalá-lo separadamente.

Você pode verificar isso usando comandos:

$ rpm -qa | grep expect para Redhat

$ dpkg -l expect para o Ubuntu

Você pode escrever um script de shell que fornecerá a senha do servidor ssh da seguinte forma:

#!/usr/bin/expect
spawn ssh user@ssh-server-ip   
expect "user@ssh-server-ip's password:"    
send "password\r"       
interact    

Este script deve fazer sua tarefa.

    
por 30.05.2012 / 07:12

Tags