sshpc_server_pair.sh
por EDSON - LAMBDA
—
última modificação
13/06/2023 11h32
sshpc_server_pair.sh
— 2 KB
Conteúdo do arquivo
#!/bin/bash
#########################################################################################
## SSHPC - Cluster de processamento distribuído baseado em SSH ##
## ##
## Local: Laboratório Multiusuário de Bioinformática e Análise de Dados (LAMBDA) ##
## Centro de Biotecnologia (CBiotec), Universidade Federal da Paraíba (UFPB) ##
## Data: 30/05/2023 ##
## Coordenador: Edson Luiz Folador ##
## IC: Arthur Araújo de Lacerda ##
#########################################################################################
readonly PROGNAME=$(basename "$0")
readonly PROGDIR=$(readlink -m $(dirname "$0"))
readonly SSHPC_DIRECTORY="/home/sshpc"
debugging() { ${debug} && echo -e "$1"; }
help() {
echo "Usage: ./sshpc_server_pair.sh [OPTION] args"
echo "Pair with computing node"
echo "Example ./.sshpc_server_pair.sh -i 192.123.453.54 -l MYLAB"
echo
echo "Options"
echo -e "-i, --ip\tIp from node you are trying to connect"
echo -e "-l, --lab\tLab from node you are trying to connect"
echo -e "-q, --quiet\tDisables verbose"
echo -e "-h, --help\tHelp function"
}
test_connection() {
# Sends ssh-key to client
local ip="${1}" && debugging "connecting to ip ${ip}"
local port="9123"
local key="${SSHPC_DIRECTORY}/.ssh/id_rsa.pub"
debugging "scp -P ${port} ${key} sshpc@${ip}:~"
scp -P ${port} ${key} sshpc@"${ip}":~
}
repair() {
server_ip=$(ip ad show enp3s0 | grep -Po "([0-9]{0,3}\.){3}[0-9]*" | head -1)
client_ip=$1
lab=$2
ssh-keygen -R "${client_ip}"
ssh -p 9123 sshpc@$client_ip /home/sshpc/.bin/sshpc_client_pair.sh -i $server_ip -l $lab &
}
scan_pairing_attempt() {
while true; do
# Select only the login attempts that are Invalid User attempts
# /var/log/auth.log is wherer attemps are stored
local invalid_attempt=$(grep 'Invalid user sc_pair_sshpc' < "${SSHPC_DIRECTORY}/sshpc.log" | sed -E 's/ +|_/\t/g' | cut -f 14 | sed 's/[_ ]/;/g' | sort -k 4 | uniq)
echo "" > "${SSHPC_DIRECTORY}/sshpc.log"
if [[ -z "${invalid_attempt}" ]]; then
debugging "looking for pairing"
sleep 10
else
debugging "pair connection found, sending key"
test_connection "${invalid_attempt}"
return 0
fi
sleep 3
done
}
main() {
# Debug
local debug=true
while true; do
case "$1" in
-q | --quiet) debug=false; shift;;
-i | --ip) client_ip=$2; shift; shift;;
-l | --lab) lab=$2; shift; shift;;
-h | --help) help; exit 0;;
--) break;;
*) break;;
esac
done
repair $client_ip $lab
scan_pairing_attempt
}
main "$@"