Ssh

每當使用者連接時在 SSH 伺服器上執行命令,即使只是為了隧道

  • June 18, 2019

作為多人使用的 OpenBSD ssh jumphost 的管理員,我想在任何使用者通過 SSH 連接時執行特定命令,即使只是為了隧道。

這可能嗎?

我試過使用ForceCommand/etc/sshrc但這些似乎只適用於使用者有互動式會話而不是其他情況。

因為我正在執行 OpenBSD,不幸的是,沒有任何基於 PAM 的工作,即This answer on Unix & Linux

該腳本只是sendmail使用whoamiand執行$SSH_CONNECTION來通知我誰登錄以及從哪裡登錄。

#!/bin/sh

EMAIL=alerts@example.com

sendmail -F alerts -f $EMAIL root << EOF
Subject: New Login For $1
Message-ID: <$(date +%s)@$(hostname)>
X-Mailer: OpenSMTPD
Content-Type: text/plain

There has been a new login for $1 on $SSH_CONNECTION
EOF

您可以監控/var/log/authlogawk在特定行匹配時向您發送消息:

tail -f /var/log/authlog | awk '/Accepted pubkey/ { system("mail -s " $0 " admin@example.com << EOF\nEOF") }'

您當然可以/Accepted pubkey/用適合您情況的其他模式替換。我選擇以日誌行作為主題發送空電子郵件,以便在 MUA 上更輕鬆地閱讀,但您可能更喜歡類似

system("mail -s New\\ Login admin@example.com << EOF\n" $0 "\nEOF")

引用自:https://unix.stackexchange.com/questions/523136