내 Linux 워크스테이션은 공유 네트워크의 일부입니다. 누군가가 SSH를 통해 내 워크스테이션에 연결할 때마다 알림 이메일을 받고 싶습니다. 이를 위해 파일을 열고 ~/.bash_profile
( gedit
내 파일은 ~/.bash_profile
완전히 비어 있음) 다음 줄을 썼습니다.
IP="$(echo $SSH_CONNECTION | awk '{print $1}')"
HOST=$(hostname)
TIME_DATE_STAMP=$(date +"%e %b %Y, %a %r")
echo 'The '$IP' logged into '$HOST' on '$ TIME_DATE_STAMP'.' | mail -s 'SSH
Login Notification' MY_EMAIL_ADDRESS
아직 알림 이메일을 받지 못했습니다! 내가 뭘 잘못하고 있는지 알려주세요.
"who -H"
이 문제를 해결하려면 int 터미널 명령을 사용할 때 . 내 워크스테이션에 들어오는 모든 SSH 작업 목록을 제공합니다. 내 질문은: "누가" 명령이 이 정보를 어떻게 생성합니까? 해당 데이터 소스는 무엇이며, 이를 사용하여 ssh
원하는 데이터를 얻을 수 있나요?
답변1
몇 가지:
당신의
~/.bash_profile
다음 경우에만 시작하세요.너로그인. 이러한 다른 사용자는 귀하로 로그인되어 있지 않을 수 있습니다.누가 CentOS 시스템에 SSH로 접속하는지 관찰하려면
/var/log/secure
.
다음과 같습니다.
tail -f /var/log/secure | while read LOGLINE
do
[[ "${LOGLINE}" == *"logged in"* ]] && mail -s 'SSH Notification' $MY_EMAIL_ADDRESS
done
who
편집: 명령이 어떻게 작동하는지 묻기 위해 질문을 편집했습니다 . 저는 C 개발자는 아니지만,이것이 소스코드이고 who
명령어이다그것이 어떻게 작동하는지 정말로 보고 싶다면. 그러나 나는 이것이 당신이 찾고 있는 것이라고 생각하지 않습니다. 그리고 나는 당신을 도울 수 있는 다른 방법도 모릅니다. 누군가가 악용 cron
및 로그인 하는지 확인하는 스크립트를 만들 수 있더라도 who
실행 사이에 누군가가 로그인하고 로그아웃할 가능성은 항상 있습니다. 저널링이 갈 길입니다.
답변2
"who" 명령에서 필요한 정보를 추출하여 명령 메일로 파이프할 수 있습니다. 명령 예:
who | awk '{print $1" "$3" "$4" " $5}' | tail -1 | mail -s 'WARNING: SSH Notification' EMAIL_ADDRESS
이전 명령을 다른 이름으로 저장 하고 특정 분마다(예: 30분마다) 실행되도록 bash
예약합니다 .crontab
답변3
명령의 출력을 파이프할 수 있습니다 last
.
last | head -1 | mail -s 'WARNING:' EMAIL_ADRESS