Estou trabalhando na minha máquina virtual no bash. Me pedem para encontrar todos os endereços IP que foram usados para uma tentativa de acesso à máquina sem autorização, usando o arquivo auth.log. Parece que não encontro nenhuma resposta para o meu problema. Aqui está um exemplo :
todas as linhas retornadas devem ser escritas em meu arquivo compartilhado /mnt/analyse/traitement/cueillette.txt. Por favor ajude ! Obrigado
Responder1
Você não precisa canalizar grep para grep (isso é quase sempre um sinal de que você está adotando uma abordagem ineficiente e equivocada. sed
por si só é suficiente para esta tarefa. ou awk
. ou perl
), e isso sudo su root cat
é simplesmente um absurdo.
Experimente isto:
$ sudo sed -n -E -e '/sshd.*authentication failure/{s/^.*rhost=([0-9.]+).*/\1/p}' \
/media/sf_partageAuth/auth.log > /mnt/analyse/traitement/cueillette.txt
Para cada linha que corresponda a "falha de autenticação" (observe,não"autenticofication"), esse sed
script remove tudo desde o início da linha até (e inclusive) rhost=
e tudo depois do endereço IP e, em seguida, imprime a linha.
Ele usa a opção sed
' -E
para expressões regulares estendidas, para que ()
funcione +
sem a necessidade de escape.
Observe que, embora o sed
comando seja executado como root com sudo
, o redirecionamento de saída não é - isso é feito em seu shell não-root original. Se você precisar de privilégios de root para gravar também no arquivo de saída, execute tee
com sudo
, por exemplo:
$ sudo sed -n -E -e '/sshd.*authentication failure/{s/^.*rhost=([0-9.]+).*/\1/p}' \
/media/sf_partageAuth/auth.log |
sudo tee /mnt/analyse/traitement/cueillette.txt > /dev/null