一些正确安装的脚本

一些正确安装的脚本

是否可以找出访问帐户时使用的 ssh 密钥?我在服务器上有一个帐户,我让几个(受信任的!)人可以通过 ssh 访问该帐户。我发现能够知道谁登录以及何时登录很有用。我有 root 访问权限,所以我可以查看日志,但那里似乎没有任何内容。是否有一些配置开关可以在日志中添加某种识别密钥的方法?

答案1

如果您进入 sshd 配置文件(通常/etc/ssh/sshd_config)并将 LogLevel 指令更改为 VERBOSE:

LogLevel VERBOSE

...你可以在日志中看到类似这样的内容:

6月24日22:43:42 localhost sshd[29779]:找到匹配的RSA密钥:d8:d5:f3:5a:7e:27:42:91:e6:a5:e6:9e:f9:fd:d3:
ce 24 22:43:42 localhost sshd[29779]:从 127.0.0.1 端口 59630 ssh2 接受 caleb 的公钥

man sshd_config

   LogLevel
          Gives  the  verbosity  level that is used when logging messages from
          sshd(8).  The possible values are: QUIET, FATAL, ERROR,  INFO,  VER-
          BOSE,  DEBUG,  DEBUG1,  DEBUG2,  and  DEBUG3.   The default is INFO.
          DEBUG and DEBUG1 are equivalent.  DEBUG2  and  DEBUG3  each  specify
          higher  levels of debugging output.  Logging with a DEBUG level vio-
          lates the privacy of users and is not recommended.

答案2

有点类似于@user37161的回答。如果共享帐户正在运行自定义 shell,并且该 shell 需要知道那里有哪个用户,则运行“包装器”脚本可能还不够,因为除非通过可能导致竞争的方法,否则信息不会传递到自定义 shell状况。

相反,您可以使用environment=authorized_keys 文件中的选项来设置环境变量,然后自定义 shell 可以读取该环境变量。

.ssh/authorized_keys文件中,在每一行前面添加一个环境变量集,如下所示:

environment="REMOTEUSER=jrhacker" ssh-rsa ....
environment="REMOTEUSER=jbloggs" ssh-rsa ....

然后,自定义 shell 或任何各种 rc 脚本都可以读取该$REMOTEUSER变量并采取适当的操作。

但是,请注意,如果您使用的是标准 shell,则登录用户能够修改该文件以阻止各种操作。此外,允许用户设置环境变量(例如LDPRELOAD.请参阅sshd_config有关 的文档PermitUserEnvironment

答案3

一些正确安装的脚本

有一个完整可用的方法可以通过密钥跟踪/记录 ssh 连接并扩展用户名。

介绍

除了@Caleb 的回答之外,我还想分享一些小技巧:

笔记:我正在 Debian 6.0 上工作

服务器安装

SSHD 日志级别

首先确保服务器配置具有足够的日志记录级别:

作为 root,这将设置并激活详细日志记录:

sed '/^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{s/^/# /;h;s/$/\nLogLevel VERBOSE/};${p;g;/./!{iLogLevel VERBOSE'$'\n;};D}'  -i /etc/ssh/sshd_config

可以写成:

sed '
     /^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{
        s/^/# /;
        h;
        s/$/\nLogLevel VERBOSE/
    };
    ${
        p;
        g;
        /./!{
            iLogLevel VERBOSE
        };
        D
    }'  -i /etc/ssh/sshd_config

或在一个sed脚本:

#!/bin/sed -f
/^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{
    s/^/# /;
    h;
    s/$/\nLogLevel VERBOSE/
};
${
    p;
    g;
    /./!{
        iLogLevel VERBOSE
    };
    D
}

可以运行为:

patchSshdConfigLogLevel.sed -i /etc/ssh/sshd_config

那么对于激活这:

service ssh restart

Syslog:使指纹用户可读

现在在用户可读文件中获取指纹:

echo ':msg, regex, "Found matching .* key:" -/var/log/sshdusers.log' \
    > /etc/rsyslog.d/ssh_key_user.conf 
echo ':msg, regex, "Accepted publickey for" -/var/log/sshdusers.log' \
    >> /etc/rsyslog.d/ssh_key_user.conf 

service rsyslog restart

尝试从 ssh(重新)登录以确保sshdusers.log创建新文件(并包含某些内容),然后

chmod 644 /var/log/sshdusers.log

最后一步:让它们旋转。

加入/etc/logrotate.d/

cat >/etc/logrotate.d/sshdusers <<eosshdusers
/var/log/sshdusers.log {
  rotate 3
  daily
  compress
  missingok
  postrotate
        touch /var/log/sshdusers.log
        chmod 644 /var/log/sshdusers.log
        /usr/lib/rsyslog/rsyslog-rotate
  endscript
  notifempty
}
eosshdusers

用法

这将打印当前会话的指纹:

sed -ne "/sshd.$PPID.:.*matching .SA key/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log
sed -ne "/sshd.\($(($(ps ho ppid $PPID)))\|$PPID\).:.*\(Accepted publickey\|matching .SA key\)/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log

插件用于.bashrc

最后,还有一点添加在/etc/bash.bashrc放在您或用户的末尾.bashrc

ssh_oPwd=$OLDPWD
ssh_oUmask=$(umask)
umask 077
ssh_tempdir=$(mktemp -d /tmp/ssh-id-XXXXXXX)
cd $ssh_tempdir || exit 1

ssh_crtFp=$(
    sed -ne "/sshd.\($(($(ps ho ppid $PPID)))\|$PPID\).:.*\(Accepted publickey\|matching .SA key\)/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log
)
for ((ssh_i=1;ssh_i<=$(wc -l <$HOME/.ssh/authorized_keys);ssh_i++));do
    export ssh_line="$(sed -ne ${ssh_i}p <$HOME/.ssh/authorized_keys)"
    echo "$ssh_line" >tempKey
    export ssh_lFp=($(ssh-keygen -l -f tempKey))
    if [ "${ssh_lFp[1]}" == "$ssh_crtFp" ] ;then
        export SSH_KEY_USER=${ssh_line##* }
        break
      fi
  done

cd $OLDPWD
OLDPWD=$ssh_oPwd
rm -fR $ssh_tempdir
umask $ssh_oUmask
unset ssh_lFp ssh_line ssh_i ssh_crtFp ssh_tempdir ssh_oUmask ssh_oPwd

因此从 SSH 重新登录后,您将看到:

set | grep ^SSH
SSH_CLIENT='192.168.1.31 43734 22'
SSH_CONNECTION='192.168.1.31 43734 192.168.1.2 22'
SSH_KEY_USER=user@mydesk
SSH_TTY=/dev/pts/2

笔记在某些安装中,授权密钥文件可能具有不同的名称,例如$HOME/.ssh/authorized_keys2......

答案4

在 fedora 20+ 上,登录尝试和成功信息保存在 /var/log/audit/audit.log 中。该日志保存登录尝试(失败和成功),并且用于登录尝试的密钥指纹保存在名为 fp 的字段中。

您可以通过 ssh-keygen -l 逐行运行来将登录的密钥指纹与authorized_keys中的指纹进行比较

有关 ssh 登录及其安全性和入侵检测的详细说明如下:http://vpathak.tumblr.com/post/121343814158/fedora-audit-log-with-love-from-Russia

相关内容