| SSH-LAST(1) | User Commands | SSH-LAST(1) |
نام (NAME)
ssh-last - فهرست کردن آخرین نشستهای SSH
خلاصه دستور (SYNOPSIS)
ssh-last [OPTIONS] ssh_logs | ssh-last [OPTIONS]
گزینهها (OPTIONS)
-a نمایش تمام نشستها (نمایش دادههایی که توسط فایل 'ignored' پنهان شدهاند)
-c خروجی رنگی (برجستهسازی نشستهای فعال SSH)
-d اشکالزدایی (debug)
-f اجبار به نمایش اثرانگشتها (عدم نگاشت از فایل 'known')
-h نمایش این پیام راهنما
-i اجبار به نمایش شناسه گواهیها (عدم نگاشت از فایل 'known'، همراه با -f استفاده نشود)
-l تلاش برای استفاده از فایلهای لاگ به جای journalctl (ممکن است در برخی سیستمها سریعتر باشد)
-n نمایش نام میزبان/IP به صورت متن خام (عدم نگاشت از فایل 'known')
-w تنها نمایش نشستهای فعال SSH
-? نمایش راهنمای کامل با اطلاعات دقیقتر
(معمولاً برای عملکرد صحیح نیاز به نصب perl-doc دارد)
--version نمایش اطلاعات نسخه
مثالها (EXAMPLES)
ssh-last ssh-last -c | more ssh-last -c | less -R # حفظ خروجی رنگی در less ssh-last -cw # لاگهای دیروز LC_TIME=C journalctl _COMM=sshd -g 'Accepted|Disconnected' --since yesterday | ssh-last # لاگهای سه روز پیش LC_TIME=C journalctl _COMM=sshd -g 'Accepted|Disconnected' --since -3d --until -2d | ssh-last # لاگهای یک ساعت گذشته LC_TIME=C journalctl _COMM=sshd -g 'Accepted|Disconnected' --since -1h | ssh-last # لاگها تا یک تاریخ مشخص LC_TIME=C journalctl _COMM=sshd -g 'Accepted|Disconnected' --until "2022-03-12 07:00:00" | ssh-last # از فایلهای لاگ (ترتیب باید از قدیمیترین به جدیدترین باشد) zgrep -hE 'Accepted|Disconnected' auth.log.2.gz auth.log.1 auth.log | ssh-last zgrep -hE 'Accepted|Disconnected' $(ls /var/log/auth.log* --sort=time --reverse) | ssh-last zgrep -hE 'Accepted|Disconnected' $(ls /var/log/messages* --sort=time --reverse) | ssh-last zgrep -hE 'Accepted|Disconnected' $(ls /var/log/secure* --sort=time --reverse) | ssh-last
توضیحات (DESCRIPTION)
ابزار ssh-last مانند دستور last عمل میکند، اما برای نشستهای SSH است.
پرچمهای خروجی (Output Flags)
+--------------------------------------------------------------------------+ | | | AUTH_ID | | | | (C) sshd authorized login via (c)ertificate | | (K) sshd authorized login via public (k)ey | | (?) sshd authorized login via some other type (password, pam) | | | +--------------------------------------------------------------------------+
الگوریتم (Algorithm)
بررسی دقیق لاگهای sshd به ترتیب زمانی: ۱) یافتن خطوط ورود (Accepted) و خروج (Disconnected). ۲) ذخیره اطلاعات خطوط مانند username ،auth_type ،fingerprint و... ۳) استفاده از پورت شبکه استفادهشده برای بررسی نشستهای فعال و بازسازی نشستهای قدیمی با به خاطر سپردن پورتهای شبکه ثبتشده ۴) استفاده عمده از /etc/os-release برای سازگاری با سیستمهای مختلف که در نام فایلهای لاگ، الگوهای لاگاندازی و غیره با هم تفاوت دارند...
فایلها (FILES)
نادیدهگرفتهشدهها (Ignored)
/etc/ssh-tools/ssh-last/ignored ~/.config/ssh-tools/ssh-last/ignored ./ignored این دادهها در خروجی پنهان خواهند شد مگر اینکه با گزینه -a اجبار شود +--------------------------------------------------------------------------+ |# Fingerprints | | | |SHA256:ElgyEn5xPe4VlK5jJkqauRdAKNRHdh2tGHfo0m9/IwW Jenkins | |SHA256:5xPe4JkqaElKNRHGHfxPe4RdAKdh2tlK5AKNRHn5xK5 foo # comment | |SHA256:nmKL5s7/fs45312nvjhFSRTREa44r2hfgJHJG54353R bar@gmx.de | | | |# Hosts | | | |127.0.0.1 localhost # local ssh logins | |192.168.1.50 nas # more comments | |webserver # alias from the 'known' file | | | |# Cert IDs | | | |user1@company.com | |user2@company.com with some info | |user3@company.com with some info # and a comment | | | |# Users | | | |git # gitlab | +--------------------------------------------------------------------------+
شناختهشدهها (Known)
/etc/ssh-tools/ssh-last/known ~/.config/ssh-tools/ssh-last/known ./known برای این کلیدها مقدار نگاشتشده به جای کلید نمایش داده خواهد شد، مگر اینکه با گزینههای -f (اثرانگشتها) و -n (میزبانها) یا گزینه -i (شناسههای گواهی) اجبار شود +--------------------------------------------------------------------------+ |# Fingerprints | | | |SHA256:WwI/9m0ofHGt2hdHRNKAdRuaqkJj5KlV4ePx5nEyglE Sven Wick | |SHA256:xyk5ZZZWZKnmKL5mYdk8Poy5eds7/CD/JEwqykMnlQQ root@n40l # comment | |SHA256:G7h9i5+NDU72Ae40gCkxyvDz/8BH+KETw7sXHCYr5w0 sven.wick@gmx.de | | | |# Hosts | | | |127.0.0.1 localhost # local ssh logins | |192.168.1.50 nas # more comments | |192.168.50.100 webserver | | | |# Cert IDs | | | |user1@company.com vaporup | +--------------------------------------------------------------------------+
باگها و محدودیتها (BUGS AND LIMITATIONS)
میزبانهای واسط (JumpHosts)
استفاده از یک JumpHost با ProxyCommand یا ProxyJump، اغلب ممکن است منجر به قطع ارتباط ناقص بدون ثبت هیچ لاگی شود، بنابراین LOGOUT و DURATION قابل نمایش نخواهند بود.
کاربران بدون امتیاز (Unprivileged users)
در صورت امکان، ssh-last را به عنوان ریشه (root) یا از طریق sudo اجرا کنید ۱) فایلهای لاگ و ژورنال systemd معمولاً توسط یک کاربر عادی قابل خواندن نیستند ۲) گزینه ssh-last -w تنها به عنوان کاربر root به طور قابل اعتماد کار میکند، زیرا ss و netstat هنگام اجرا توسط کاربر عادی، اطلاعات فرآیند را نمایش نمیدهند ۳) دستور ssh-last تلاش میکند اثرانگشت را از فایل authorized_keys کاربر نگاشت کند اما معمولاً کاربران اجازه دسترسی به فایلهای یکدیگر را ندارند
ارتقای سیستمعامل (OS Upgrades)
اگر یک ارتقای درجا (in-place) مانند dist-upgrade را در Debian/Ubuntu انجام دهید، بسته به تفاوت نسخه، ممکن است رخ دهد که sshd از آن نقطه به بعد به شکلی متفاوت لاگ ثبت کند و ممکن است ترکیبی از لاگها با قالب جدید و قدیمی داشته باشید که در نتیجه ssh-last تنها جدیدترین موارد را به درستی نمایش میدهد
ناهمخوانی لاگها (Log inconsistency)
مواردی مشاهده شده است که برخی از پیامهای لاگ "Disconnect" مربوط به sshd در ژورنال systemd مفقود بودند اما در /var/log/auth.log وجود داشتند. بنابراین، اگر ssh-last زمان خروج و مدتزمان را نمایش نمیدهد اما خطوط لاگ در فایل لاگ وجود دارند، بررسی کنید که آیا پیام لاگ واقعاً به ژورنال systemd رسیده است یا خیر، زیرا ssh-last به طور پیشفرض از journald استفاده میکند
نکات (NOTES)
اسکریپتهای کمکی (Helper Scripts)
برای راحتی میتوانید اسکریپتهای واسط کوچکی مانند نمونه زیر بسازید که با محدود کردن دادهها صرفاً به هفته گذشته، از پردازش لاگهای بسیار زیاد جلوگیری میکند my-ssh-last +--------------------------------------------------------------------------+ | #!/usr/bin/env bash | | | | LC_TIME=C journalctl _COMM=sshd --since -1week \ | | | grep -E 'Accepted|Disconnected' \ | | | ssh-last "$@" | | | +--------------------------------------------------------------------------+
همچنین ببینید (SEE ALSO)
نویسنده (AUTHOR)
Sven Wick <sven.wick@gmx.de>
| 2024-09-26 | SSH-TOOLS |