อัปเกรด 2016-10-31 เกี่ยวกับรูปแบบบันทึก
สคริปต์บางตัวสำหรับการติดตั้งที่เหมาะสม
มีวิธีใช้เต็มรูปแบบในการติดตาม / บันทึกการเชื่อมต่อ ssh โดยใช้คีย์พร้อม expention to username
บทนำ
นอกเหนือจากแอนเนอร์ของ @Caleb แล้วฉันต้องการแบ่งปันเคล็ดลับเล็ก ๆ น้อย ๆ ที่นั่น:
หมายเหตุ: ผมทำงานใน Debian 6.0
การติดตั้งเซิร์ฟเวอร์
ระดับการบันทึก SSHD
ก่อนอื่นให้แน่ใจว่าการกำหนดค่าเซิร์ฟเวอร์มีระดับการบันทึกที่เพียงพอ:
ในฐานะที่เป็น root นี้จะตั้งค่าและเข้าสู่ระบบ verbose verbose:
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
การใช้
สิ่งนี้จะพิมพ์ลายนิ้วมือของเซสชันปัจจุบัน:
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
และในที่สุดก็มีAdd-onเล็ก ๆ น้อย ๆสำหรับวางไว้ที่ส่วนท้ายของ/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
...