Como detectar uma conexão SSH?

2

Por alguma razão, tenho o seguinte cenário:

Na inicialização, estou iniciando um script que aguarda um determinado período de tempo e verifica se uma conexão SSH foi estabelecida durante essa janela de tempo ou não. Se uma conexão está aberta, o script faz a ação A, senão mata o sshd e faz B.

Qual seria a melhor maneira de detectar uma conexão aberta? (O script pode ser escrito em Bash ou Ruby)

thx

    
por Scolytus 27.09.2010 / 10:41

2 respostas

6

Se você quiser detectar uma sessão SSH atual, use lsof -i :22 e procure retornando mais de 2 linhas ou grep para ESTABLISHED:% [root@nemo ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 3772 root 3u IPv6 9906 TCP *:ssh (LISTEN)
sshd 21376 root 3r IPv6 159072 TCP myserver:ssh->someip:27813 (ESTABLISHED)
sshd 21381 james 3u IPv6 159072 TCP myserver:ssh->someip:27813 (ESTABLISHED)

Para ver se uma sessão foi aberta, procure algo semelhante ao seguinte em / var / log / secure (no redhat / centos / fedora):
Sep 27 05:05:28 nemo sshd[21376]: Accepted password for james from some_ip port 27813 ssh2
Se você permitir a autenticação por outros meios além da senha, as entradas de log podem ser ligeiramente diferentes.

    
por 27.09.2010 / 11:08
2
#client connecting from ${CLIENT_IP} to local ssh listening on SSHD_IP default port

A() {
  echo "A"
}
B() {
  echo "B"
}
CLIENT_IP=""
SSHD_IP=""
sleeptime=5 #use this counter to sleep $sleeptime seconds, decrementing on match fail
while [ ${sleeptime} -gt 0 ] ; do
  netstat -nt |grep -q -E "${CLIENT_IP}:[0-9]+[[:space:]]+${SSHD_IP}:22[[:space:]]+ESTA"
  if [ $? -eq 0 ] ; then 
    A; exit 0
  else
    sleeptime=$((${sleeptime} - 1))
    sleep ${sleeptime}
  fi
done
kill -TERM 'cat /var/run/sshd.pid'
B
    
por 27.09.2010 / 11:29

Tags