Testando chaves ssh ativas na rede local

0

Estou tentando concluir meu script bash para descobrir quais servidores SSH na LAN ainda estão ativos com as chaves ssh, mas estou congelado nesta etapa:

#!/bin/bash

# LAN SSH KEYS DISCOVERY SCRIPT

</etc/passwd \
grep /bin/bash |
cut -d: -f6 |
sudo xargs -i -- sh -c '
     [ -e "$1" ] && cat "$1"
' -- {}/.ssh/known_hosts |
cut -d' ' -f1 |
tr ',' '\n' |
sed '
     /^\[/{
          s/\[\(.*\)\]:\(.*\)/ /;
          t;
     };
     s/$/ 22/;
' |
sort -u |
xargs -l1 -- sh -c '
    if echo "~" | nc -q1 -w3 "$1" "$2" | grep -q "^SSH"; then
          echo "#### SUCCESS $1 $2";
    else
          echo "#### ERROR $1 $2";
    fi
' --

# TIME TO TEST WHICH SSH servers are still active with the SSH keys
# AND THIS IS WHERE I AM FROZEN...
# Would love to have bash script that could
# ssh -l $users_that_have_/bin/bash -i $ssh_keys $ssh_servers
# Would also be very nice if it could save active
# SSH servers with the valid keys in output.txt in the format
# username:local-IP:/path/to/SSH_key

há outro mais simples de ler (mas com alguns arquivos temporários sendo criados):

#!/bin/bash

# LAN SSH KEYS DISCOVERY SCRIPT
# TRYING TO FIND THOSE SSH KEYS NOW

cat /etc/passwd | grep /bin/bash > bash_users
cat bash_users | cut -d ":" -f 6 > cutted.bash_users_home_dir
for bash_users in $(cat cutted.bash_users_home_dir)
do
ls -al $bash_users/.ssh/*id_* >> ssh-keys.txt
done

# DISCOVERING THE KNOWN_HOSTS NOW

for known_hosts in $(cat cutted.bash_users_home_dir)
do
cat $bash_users/.ssh/known_hosts | awk '{print $1}' | sort -u >> 
hosts_known.txt
sleep 2
done
hosts_known=$(wc -l hosts_known.txt)
echo "We have $hosts_known known hosts that could be still active via SSH 
keys"

# TIME TO TEST WHICH SSH servers are still active with the SSH keys
# AND THIS IS WHERE I AM FROZEN...
# Would love to have bash script that could
# ssh -l $users_that_have_/bin/bash -i $ssh_keys $ssh_servers
# Would also be very nice if it could save active
# SSH servers with the valid keys in output.txt in the format
# username:local-IP:/path/to/SSH_key

Então, agora, como dito no script acima, estou tentando descobrir como fazer algum tipo de ssh -l $users_that_have_/bin/bash -i $ssh_keys $ssh_servers e despejar os logins positivos em um arquivo output.txt no seguinte formato:

username:local-IP:/path/to/SSH_key

Para responder ao comentário do DopeGhoti :

Agora estou tentando descobrir como integrar isso no meu script bash. Aqui está minha tentativa atual:

users=$(cat cutted.bash_users)
ssh_keys=$(cat ssh-keys.txt)

if ssh -l $users -i $ssh_keys $hosts_known -o BatchMode=yes -o 
ConnectTimeout=5
then echo $users:$hosts_known:$ssh_keys SUCCESS >> results.txt
else
echo FAILED
fi
    
por Gerald 01.11.2018 / 20:45

1 resposta

0

Infelizmente, parece que não posso adicionar um comentário (preciso de 50 pontos de reputação), por isso estou adicionando minha resposta a vocês. Além disso, editei anteriormente a minha pergunta, mas recebi esta notificação:

Sua edição sugerida está com revisão pendente. Patrick Mevzek comentou isto há 2 horas: Reject Esta edição pretendia abordar o autor do post e não faz sentido como edição. Deveria ter sido escrito como um comentário ou uma resposta.

Bem-vindo a U & L, você sabe que o ssh tem um código de retorno? junto com -o BatchMode = yes isso pode ajudar a automatizar o teste. (por exemplo, se ssh ...; então eco bom para ... > > good.txt; else eco ruim para ... > > bad.txt; fi) - Archemar 54 minutos atrás Also that cat | grep | cut | for pode ser reduzida para homedir em $ (awk -F: '$ 7 ~ // bin / bash / {print $ 6}' / etc / passwd); fazer .... - DopeGhoti 1 min atrás

Então, apenas para esclarecer: o que você está tentando fazer é, para cada usuário, para cada host em seus known_hosts, tentar entrar em cada host com cada chave privada presumível encontrada em ~ username / .ssh? - DopeGhoti 25 minutos atrás: SIM

aqui;

Então, agora estou tentando descobrir como posso fazer com que essa ideia se integre ao meu script, algo como:

users=$(cat cutted.bash_users)
cat ssh-keys.txt | awk '{print $9}' > cutted.ssh_keys.txt
ssh_keys=$(cat cutted.ssh_keys.txt)

if ssh -l $users -i $ssh_keys $hosts_known -o BatchMode=yes -o ConnectTimeout=5
then echo $users:$hosts_known:$ssh_keys SUCCESS >> results.txt
else
echo $users:$hosts_known:$ssh_keys FAILED >> not-active.txt
fi

Se vocês tiverem uma ideia de como tornar isso possível, ficarei muito feliz em saber como fazer isso

Obrigado

    
por 02.11.2018 / 02:01