netstat를 사용하여 SSH 연결만 Grepping

netstat를 사용하여 SSH 연결만 Grepping

.bashrc로그인할 때마다 활성 SSH 연결을 볼 수 있도록 몇 가지 명령을 추가했습니다 . 그러나 유사한 포트 번호에는 "223346"과 같이 "22"가 포함되어 있기 때문에 SSH 연결만 표시되지 않는 경우가 있습니다.

실행할 명령은 다음과 같습니다.

netstat -tan | grep ":22\|ssh" | grep -v "LISTEN" | awk '{print "     "$4" -> "$5"      "$6}'

때로는 다음과 같이 출력됩니다.

192.168.1.75:52623 -> 213.174.2.30:22650   SYN_SENT
192.168.1.75:22 -> 192.168.1.109:60561     ESTABLISHED

grep을 사용하여 SSH 연결만 표시하는 방법이 있습니까? 감사해요!

답변1

Linux의 경우 매뉴얼 페이지에 ss정확한 예가 나와 있습니다.

ss -o state established '( dport = :ssh or sport = :ssh )'

당신은 또한 볼 수 있습니다

lsof -i tcp:22

또는:

lsof -i :53

(tcp 또는 기타 전송 프로토콜)

단, lsof슈퍼유저가 아닌 경우 소유하지 않은 프로세스에 대한 정보는 나열되지 않습니다.

답변2

나는 이 테스트를 통해 접근할 것이다:

  • 설정된 연결 및
  • 중 하나를 포함들어오는(필드 3의 포트는 22입니다.) 또는나라를 떠나:(필드 4의 포트는 22입니다.) 연결 - 필드의 끝과 사이에 고정됩니다 $.

포함하도록 논리를 조정할 수 있습니다.누구나들어오거나 나가는 것, 그것이 당신이 추구하는 것이라면.

netstat의 플래그를 사용하는 경우 -n"ssh"를 검색할 필요가 없습니다. IP를 확인하려고 할 때 포트만 숫자로 지정하도록 요구하고 netstat 플래그 --numeric-ports도 제거했습니다. -a"LISTEN " 라인을 필터링합니다(다른 엔드포인트에 연결되어 있지 않기 때문입니다). 설정된 연결만 인쇄하므로 출력에서 ​​필드 6("ESTABLISHED")도 제거했습니다. 이는 정적으로든 동적으로든 쉽게 다시 추가할 수 있습니다.

netstat -n | awk '$6 == "ESTABLISHED" && ($3 ~ /:22$/ || $4 ~ /:22$/) { print $4 " -> " $5}'

또는

netstat --numeric-ports | awk '$6 == "ESTABLISHED" && ($3 ~ /:22$/ || $4 ~ /:22$/) { print $4 " -> " $5}'

관련 정보