Quiero poder intentar conectarme a un host mediante la autenticación de contraseña y almacenar la respuesta del servidor en una variable. Esto es para ver qué hosts en mi lista aceptan contraseñas para sus servicios ssh.
El problema es que no puedo redireccionar esta respuesta a una variable: Contraseña de root @ ip:
El objetivo es capturar "root @ ip's password:" como una cadena y almacenarla en una variable.
En cambio, el script se cuelga en la contraseña de root @ ip: y espera una entrada, lo que evita que el bucle continúe hasta la iteración.
Código:
#!/bin/bash
usernames=( root admin Administrator '' guest Anonymous )
response=
while read ip; do
for user in "${usernames[@]}"; do
response="$(ssh -o StrictHostKeyChecking=no -o PreferredAuthentications=password -o PubkeyAuthentication=no $user@$ip)"
printf "The response is $response"
done
done <ssh_telnet_open_ip_list
Editar, el código se ha mejorado y esto es lo que tengo ahora:
#!/bin/bash
printf "\nProbing SSH services:\n\n"
while read ip; do
printf "Response from $ip:\n"
ssh -v root@$ip -o "StrictHostKeyChecking=no" -o "PreferredAuthentications=publickey" -I /dev/null 2>&1 | \
grep "debug1: Authentications that can continue" | \
cut -d : -f 3
echo "------------------------------------------"
done <ssh_telnet_open_ip_list.txt
Salida de ejemplo:
Probing SSH services:
Response from ip:
publickey,gssapi-with-mic,password
------------------------------------------
Response from ip:
------------------------------------------
Response from ip:
publickey,password
------------------------------------------
Response from ip:
publickey,gssapi-with-mic,password
------------------------------------------
Response from ip:
publickey,gssapi-keyex,gssapi-with-mic,password
------------------------------------------
Response from ip:
publickey,password
etc ...