따라서 "10.1"로 시작하는 IP 주소가 아닌 곳에서 로그인하는 경우 이메일을 보내는 스크립트가 있습니다.
#!/usr/bin/python
import smtplib, os
server = "10.10.10.10"
From = "[email protected]"
to = ["[email protected]"] # must be a list
subject = "SSH Login from outside network"
ip = os.environ['SSH_CONNECTION'].split()[0]
user = os.environ['USER']
if '10.1.' in ip:
print "---SSH IP Check---"
print 'Inside address, no alert will be sent.'
exit(0)
text = user + " just logged in from " + ip
# Prepare actual message
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (From, ", ".join(to), subject, text)
# Send the mail
server = smtplib.SMTP(server)
server.sendmail(From, to, message)
server.quit()
이것을 /root/.bashrc의 .bashrc에 추가했으며 루트로 이 원격 서버에 로그인하면 $SSH_CONNECTION 변수를 확인하고 10.1로 시작하지 않으면 이메일을 보냅니다.
하지만 누군가가 사용자로 로그인하면 어떻게 될까요? 아니면 다른 사용자 이름인가요? 나는 원래 bash 스크립트라고 생각한 /etc/ssh/sshrc 파일을 가지고 있었고 (첫 번째 줄에는 #!/bin/sh가 없었지만) 잘 작동했지만 IP를 확인하고 싶어서 그렇게했습니다. this Python의 bash에서는 이중 [[ 괄호를 좋아하지 않습니다. 저는 그냥 sendmail로 파이프합니다.
그렇다면 질문은 SSH 로그인에서 이 스크립트를 실행하는 방법입니다. sshrc 파일을 계속 사용해야 합니까?
sshrc 파일을 이 Python 스크립트로 바꾸려고 시도했지만 로그인하면 다음과 같은 결과가 나타납니다.
/etc/ssh/sshrc: 3: /etc/ssh/sshrc: import: not found
/etc/ssh/sshrc: 5: /etc/ssh/sshrc: server: not found
/etc/ssh/sshrc: 6: /etc/ssh/sshrc: From: not found
/etc/ssh/sshrc: 7: /etc/ssh/sshrc: to: not found
/etc/ssh/sshrc: 8: /etc/ssh/sshrc: subject: not found
/etc/ssh/sshrc: 10: /etc/ssh/sshrc: Syntax error: "(" unexpected
답변1
로그인 세션을 열 때 이 스크립트를 트리거할 수 있습니다.
팸 스크립트인증, 비밀번호 변경, 세션 열기 또는 닫기 중에 PAM 스택에서 스크립트를 실행할 수 있는 PAM 모듈입니다.
Debian 기반 Linux 배포판에서는 소프트웨어 패키지로 제공됩니다 libpam-script
. Fedora에서는 이 패키지를 간단히 pam-script
.
pam-script는 다음 스크립트를 트리거할 수 있습니다.
pam_script_auth
- 인증 시 실행pam_script_acct
- 계정 관리 중 호출됨pam_script_passwd
- 비밀번호 변경시 호출됩니다.pam_script_ses_open
- 세션이 열릴 때 호출됩니다.pam_script_ses_close
- 세션이 종료되면 호출됩니다.
세션이 열릴 때 스크립트를 실행하려면 다음 위치에 추가하세요 /etc/pam.d/common-session
.
# Attempt to run pam_script_ses_open and pam_script_ses_close.
# Report success even if script is not found.
session optional pam_script.so onerr=success
Debian에서는 pam-script가 기본적으로 실행됩니다 /usr/share/libpam-script/pam_script_ses_open
. 스크립트 위치는 options 를 사용하여 구성할 수 있습니다 dir=/path/to/scripts/
.
pam-script를 사용하면 bash 스크립트에서 원격 호스트의 IP 주소에 쉽게 액세스할 수도 있습니다. 각 스크립트에는 다음 환경 변수가 전달됩니다(모두 존재하지만 해당되지 않는 경우 일부는 비어 있을 수 있음).
PAM_SERVICE
- PAM 스택을 호출하는 애플리케이션PAM_TYPE
- 모듈 유형(예: 인증, 계정, 세션, 비밀번호)PAM_USER
- 인증 중인 사용자PAM_RUSER
- 원격 사용자, 애플리케이션을 호출하는 사용자PAM_RHOST
- 원격 호스트PAM_TTY
- tty 제어PAM_AUTHTOK
- 읽을 수 있는 텍스트로 된 비밀번호
답변2
여유 설정
따라서 먼저 Slack에서 수신 Web Hook을 구성해야 합니다.
https://YOUR_DOMAIN.slack.com/apps/manage/custom-integrations
이 옵션을 구성하면 메시지를 게시할 수 있는 웹훅 URL이 제공됩니다. 기계 설정
이제 컴퓨터에 연결하고 ssh 폴더에 스크립트를 만듭니다.
sudo nano /etc/ssh/notify.sh
사용자가 로그인할 때마다 실행되도록 구성할 스크립트에 다음 코드를 추가합니다.
외부 IP 주소에 대한 SSH SLACK 경고
내 IP 주소가 아닌 다른 곳에서 로그인하면 이메일을 보내는 스크립트가 있습니다.
사용자가 로그인할 때마다 실행되도록 구성할 스크립트에 다음 코드를 추가합니다.
sudo nano /etc/ssh/notify.sh
if [ "$PAM_RHOST" != "10.0.4.61" -a "$PAM_TYPE" != "close_session" ] && \
[ "$PAM_RHOST" != "10.0.4.62" -a "$PAM_TYPE" != "close_session" ] && \
[ "$PAM_RHOST" != "10.0.4.63" -a "$PAM_TYPE" != "close_session" ] && \
[ "$PAM_RHOST" != "110.0.4.64" -a "$PAM_TYPE" != "close_session" ]; then
url="https://hooks.slack.com/ser..."
channel="#ssh-login"
host="`hostname`"
content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH login: $PAM_USER connected to \`$host\`\", \"text\": \"SSH login to \`$host\`\", \"fields\": [ { \"title\": \"User\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"IP Address\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
curl -X POST --data-urlencode "payload={\"channel\": \"$channel\", \"mrkdwn\": true, \"username\": \"ssh-bot\", $content, \"icon_emoji\": \":computer:\"}" $url
fi"
이제 스크립트를 실행 가능하게 만듭니다.
sudo chmod +x /etc/ssh/notify.sh
마지막으로 /etc/pam.d/sshd에 다음 줄을 추가합니다.
session optional pam_exec.so seteuid /etc/ssh/notify.sh
완벽한