アカウントへのアクセスに使用されたsshキーを確認することはできますか?私はサーバーにアカウントを持っています。このアカウントを数人の(信頼できる!)人々にssh経由でアクセスさせています。誰がいつログインしたかを知ることができると便利です。ログを確認できるようにrootアクセス権を持っていますが、そこには何もないようです。ログでキーを識別する何らかの方法を配置する構成スイッチはありますか?
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
Jun 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.
@ user37161の回答 に多少似ています。共有アカウントがカスタムシェルを実行していて、シェルがそこにいるユーザーを知る必要がある場合、「ラッパー」スクリプトを実行するだけでは十分ではない可能性があります。競合を引き起こす可能性のあるメソッドを除いて、カスタムシェルに情報が渡されないためです。条件。
代わりに、authorized_keysファイルのenvironment=
オプションを使用して、カスタムシェルが読み取れる環境変数を設定できます。
.ssh/authorized_keys
ファイル内で、次のように各行の先頭に環境変数を設定します。
environment="REMOTEUSER=jrhacker" ssh-rsa ....
environment="REMOTEUSER=jbloggs" ssh-rsa ....
次に、カスタムシェル、またはさまざまなrcスクリプトのいずれかが$REMOTEUSER
変数を読み取り、適切なアクションを実行できます。
ただし、標準のシェルを使用している場合は、ログインしているユーザーがファイルを変更してさまざまなことを阻止できることに注意してください。また、ユーザーがLDPRELOAD
などの環境変数を設定できるようにすることには、いくつかのリスクがあります。 PermitUserEnvironment
に関するsshd_config
のドキュメントをご覧ください。
ユーザー名の指数を使用して、キーごとにSSH接続を追跡/ログするための完全に使用可能な方法があります。
@Calebの回答に加えて、ここでいくつかの小さなトリックを共有したいと思います。
注意:Debian 6.0に取り組んでいます。
まず、サーバー構成に十分なログレベルがあることを確認します。
ルートとして、これはアクティブな詳細ログを設定します:
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
これよりactivatingより:
service ssh restart
ユーザーが読み取り可能なファイルで指紋を取得します。
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
これは現在のセッションのフィンガープリントを出力します:
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
Nota一部のインストールでは、承認されたキーファイルは$HOME/.ssh/authorized_keys2
...のように名前が異なる場合があります。
ユーザー "joe"と "deb"がアカウント "x"にアクセスできるとします。次に、アカウントxの.ssh_authorized_keys
に次の行を追加します。
command='wrapper joe' joe public key
command='wrapper deb' deb public key
また、ラッパースクリプトでは、好きなことを何でも行うことができます。joeの秘密キーは、コマンド$ORIGINAL_COMMAND
を使用して、特定の日時にssh
を使用していることをログに記録します。
あなたはこれを試すことができます:
ssh-add -L | awk '{ print $2 }' | xargs -i grep '{}' ~/.ssh/authorized_keys | head -n 1
この意志:
ssh-add -L
:公開鍵のリストawk '{ print $2 }'
:指紋のみを取得xargs -i grep '{}' ~/.ssh/authorized_keys
:各キーについて、どれがオンになっているかを確認してくださいauthorized_keys
head -n 1
:最初のものだけを取得Fedora 20+では、ログイン試行と成功は/var/log/audit/audit.logに保存されます。このログはログイン試行(失敗と成功)を保存し、ログイン試行に使用されるキーフィンガープリントはfpという名前のフィールドに保存されます。
Ssh-keygen -lを使用して1行ずつ実行することにより、ログインしたキーのフィンガープリントをauthorized_keysのフィンガープリントと比較できます。
Sshログインとそのセキュリティおよび侵入検知に関する詳細な説明は次のとおりです: http://vpathak.tumblr.com/post/121343814158/Fedora-audit-log-with-love-from-russia =
@Fに加えて。ハウリ回答、便利な「LoggedInプロンプト」を用意しました。
1つの追加ファイルはオプションです($ HOME/.ssh/users):
kszumny@laptop kszumny
kszumny@comp2 kszumny
tom@laptop tom
pati@home
chris@workstation1 chris
chris@workstation2 chris
この部分は/etc/profile
(すべてのユーザーの場合)または~/.bashrc
に貼り付ける必要があります
other_users_Prompt()
{
pids=`ps fx | grep "sshd:\s" | awk '{print $1}'`
users=""
for uid in $pids
do
ssh_crtFp=`sed -ne "/sshd.$uid.:.*matching .SA key/{s/^.* //g;p;q}" /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##* }
ST_USER=`cat $HOME/.ssh/users | grep "${SSH_KEY_USER}" | awk '{print $2}'`
if [ -z "$ST_USER" ]; then
ST_USER=$SSH_KEY_USER
fi
if [ -z "$users" ]; then
users="$ST_USER"
else
users="$users\n$ST_USER"
fi
break
fi
done
done
if [ `echo -e "$users" | sort | uniq -c | wc -l` == 1 ]; then
exit
fi
users=`echo -e "$users" | sort | uniq -c | awk '{print $2"("$1")"}' | xargs echo -e`
echo -e "[LoggedIn:$users] "
}
PS1='$(other_users_Prompt)\u@\h:\w\$ '
結果