Voglio poter tentare di connettermi a un host utilizzando l'autenticazione della password e memorizzare la risposta del server in una variabile. Questo per vedere quali host nel mio elenco accettano le password per i loro servizi ssh.
Il problema è che non posso reindirizzare questa risposta a una variabile: root @ password ip:
L'obiettivo è catturare "root @ ip's password:" come stringa e memorizzarla in una variabile.
Invece, lo script si blocca sulla password di root @ ip: e si aspetta l'input, impedendo al ciclo di continuare a iterare.
Codice:
#!/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
Modifica, il codice è stato migliorato e questo è quello che ho ora:
#!/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
Esempio di output:
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
ecc ...