我试图用logging器和邮件通知logging所有的SSH连接。 我遵循这个: #179889
#!/bin/sh sender="xxx" recepient="xxx" if [ "$PAM_TYPE" != "close_session" ]; then host="`hostname`" subject="SSH Login: $PAM_USER@$host from $PAM_RUSER@$PAM_RHOST" # Message to send, eg the current environment variables. message="`env`" echo "$message" | mail -r "$sender" -s "$subject" "$recepient" # Logger logger -t ssh-wrapper $PAM_RHOST@$host from $PAM_RUSER@$PAM_RHOST fi
问题是$ PAM_ R USER是空的。
如何设置这个envvariables?
你从哪里得到PAM_RUSER?
PAM_RHOST是远程主机(即连接的来源)。 这很简单:你需要一个(L)HOST(本地)和一个RHOST(远程)连接(是的,两者都可以是127.0.0.1或者:: 1,或者其他任何东西,但是你需要两次,因为这里的连接是点对点的)。
但是PAM_RUSER是一个不同的概念:如果RHOST提供了一个用户,那就是RHOST想authentication的本地用户(即你的LHOST上的用户)。
像rlogin / rsh / rcp和co这样的工具有一个RUSER的概念,因为r * -tools依靠信任主机。
像SSH这样的东西不会,因为它不信任远程主机,但是能够对给定的帐户进行身份validation。 换句话说:使用SSH,基本上没有RUSER,因为SSH只关心授予RHOST在LOST上作为LUSERlogin的能力。
换句话说:从客户端的angular度来看,除非你告诉它做别的事情,否则ssh HOST将使用你的本地用户名作为用户名login – 所以RUSER == LUSER。 如果您select提供不同的名称,例如在ssh USER@HOST ,SSH服务器只知道提供给它的任何USER,而没有人会说出USER可能具有的其他值。
这是一般的情况 – 使用例如Kerberos可能会改变这种情况,因为有一个可靠的身份validation用户(委托人)的概念能够certificate他们是他们自称的人。
tl; dr:您对USER / PAM_USER的关心,因为如果访问权限被错误授权,那么这个账户将会被入侵。
编辑:考虑更新的信息。
看看你的用例,可能有更好的方式来获得这种信息/属性 – 使用公钥authentication。 这可以让你有这样的日志:
Mar 01 09:35:47 HOSTN sshd[60412]: Accepted publickey for USER from RHOST port 42088 ssh2: RSA xx:d6:09:xx:76:84:xx:7e:22:xx:af:a2:xx:b3:8b:xx
我不完全确定您将如何收到电子邮件,但您可以考虑以下选项之一:
我承认,这不是,你的原始解决scheme是相同的(并要求你有某种人 – >键映射 – 但通常是一件好事)。