したがって、「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に追加し、rootとしてこのリモートサーバーにログインすると、$ SSH_CONNECTION変数を確認し、10.1で始まらない場合はEメールを送信します。
しかし、誰かがユーザーとしてログインするとどうなりますか?それとも別のユーザー名ですか?私はもともと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
このオプションを設定すると、メッセージを公開するためのWebフック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
完璧