ฉันเพิ่งจะรูท SSH และจากนั้น SSH ก็จะรูทบนเครื่องเดียวกันอีกครั้ง ดังนั้นฉันจึงเปิดหน้าต่างสองบานทั้งสอง SSH ลงในรูทเครื่องของฉัน
จากเปลือกฉันจะดูรายการของสองช่วงนี้ได้อย่างไร?
ฉันเพิ่งจะรูท SSH และจากนั้น SSH ก็จะรูทบนเครื่องเดียวกันอีกครั้ง ดังนั้นฉันจึงเปิดหน้าต่างสองบานทั้งสอง SSH ลงในรูทเครื่องของฉัน
จากเปลือกฉันจะดูรายการของสองช่วงนี้ได้อย่างไร?
คำตอบ:
who
หรือw
; who -a
สำหรับข้อมูลเพิ่มเติม
คำสั่งเหล่านี้จะแสดงเซสชันการล็อกอินทั้งหมดบนอุปกรณ์เทอร์มินัล เซสชัน SSH จะอยู่ใน pseudo-terminal slave ( pts
) ดังที่แสดงในTTY
คอลัมน์ แต่ไม่ใช่ทุกการเชื่อมต่อ pts ที่เป็นเซสชัน SSH ยกตัวอย่างเช่นโปรแกรมที่สร้างอุปกรณ์หลอกขั้วเช่นxterm
หรือจะแสดงเป็นscreen
pts
ดูความแตกต่างระหว่าง pts และ ttyสำหรับคำอธิบายที่ดีขึ้นของค่าต่าง ๆ ที่พบในTTY
คอลัมน์ นอกจากนี้วิธีการนี้จะไม่แสดงใครที่เข้าสู่เซสชัน SFTP เนื่องจากเซสชัน SFTP ไม่ใช่เซสชันการเข้าสู่ระบบเชลล์
ฉันไม่รู้วิธีใดที่จะแสดงเซสชัน SSH ทั้งหมดอย่างชัดเจน คุณสามารถอนุมานข้อมูลนี้ได้โดยการอ่านข้อมูลเข้าสู่ระบบจากutmp
/ wtmp
ผ่านเครื่องมือเช่นlast
, w
หรือwho
เช่นที่ฉันเพิ่งอธิบายหรือใช้เครื่องมือเครือข่ายเช่น @sebelk ที่อธิบายไว้ในคำตอบของพวกเขาเพื่อค้นหาการเชื่อมต่อ tcp ที่เปิดบนพอร์ต 22 daemon เป็น / กำลังฟังอยู่
วิธีที่สามที่คุณสามารถทำได้คือการแยกวิเคราะห์บันทึกจาก SSH daemon ขึ้นอยู่กับการกระจาย OS ของคุณการกระจาย SSH การกำหนดค่าและอื่น ๆ เอาต์พุตบันทึกของคุณอาจอยู่ในสถานที่ต่าง ๆ บน RHEL 6 /var/log/sshd.log
กล่องผมพบบันทึกใน ในกล่อง RHEL 7 และในกล่อง Arch Linux ฉันต้องใช้journalctl -u sshd
เพื่อดูบันทึก ระบบบางระบบอาจส่งออกบันทึก SSH ไปยัง syslog บันทึกของคุณอาจอยู่ในสถานที่เหล่านี้หรือที่อื่น ๆ นี่คือตัวอย่างของสิ่งที่คุณอาจเห็น:
[myhost ~]% cat /var/log/sshd.log | grep hendrenj | grep session
May 1 15:57:11 myhost sshd[34427]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May 1 16:16:13 myhost sshd[34427]: pam_unix(sshd:session): session closed for user hendrenj
May 5 14:27:09 myhost sshd[43553]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May 5 18:23:41 myhost sshd[43553]: pam_unix(sshd:session): session closed for user hendrenj
บันทึกจะแสดงเมื่อเปิดและปิดเซสชันซึ่งเป็นของเซสชันที่ผู้ใช้เชื่อมต่อจากและอื่น ๆ อย่างไรก็ตามคุณจะต้องแยกวิเคราะห์จำนวนมากหากคุณต้องการรับสิ่งนี้จากบันทึกเหตุการณ์ที่เรียบง่ายและมนุษย์อ่านได้ไปยังรายการของเซสชันที่ใช้งานอยู่ในปัจจุบันและอาจยังคงไม่ถูกต้องเมื่อ คุณแยกวิเคราะห์เสร็จแล้วเนื่องจากบันทึกไม่ได้มีข้อมูลเพียงพอที่จะพิจารณาว่าเซสชันใดที่ยังใช้งานอยู่ - คุณเพียงแค่คาดเดา ข้อได้เปรียบเดียวที่คุณได้รับจากการใช้บันทึกเหล่านี้คือข้อมูลมาจาก SSHD โดยตรงแทนที่จะผ่านแหล่งข้อมูลมือสองเช่นวิธีอื่น
w
ผมขอแนะนำให้เพียงแค่ใช้ ส่วนใหญ่แล้วคุณจะได้รับข้อมูลที่คุณต้องการ
คุณสามารถเห็นทุกเซสชัน ssh ด้วยคำสั่งต่อไปนี้:
[root@router ~]# netstat -tnpa | grep 'ESTABLISHED.*sshd'
tcp 0 0 192.168.1.136:22 192.168.1.147:45852 ESTABLISHED 1341/sshd
tcp 0 0 192.168.1.136:22 192.168.1.147:45858 ESTABLISHED 1360/sshd
บางทีนี่อาจเป็นประโยชน์:
[root@router ~]# ps auxwww | grep sshd:
root 1341 0.0 0.4 97940 3952 ? Ss 20:31 0:00 sshd: root@pts/0
root 1360 0.0 0.5 97940 4056 ? Ss 20:32 0:00 sshd: root@pts/1
root 1397 0.0 0.1 105300 888 pts/0 S+ 20:37 0:00 grep sshd:
pgrep -ai sshd
pgrep: invalid option -- 'i'
บน Ubuntu 14.04
-i
มีเฉพาะในรสชาติ mac / bsd เท่านั้น บน Ubuntu pgrep -af ssd
คุณสามารถใช้ ดูรายละเอียดเพิ่มเติมได้ที่serverfault.com/a/883270/116777
คุณยังสามารถใช้
ps ax | grep sshd
เพิ่มเพื่อการอ้างอิงอย่างง่าย
หากคุณอยู่ในเชลล์หลอก (ตัวอย่าง: / dev / pts / 0) หนึ่งในวิธีที่ง่ายที่สุดคือ:
[user1@host ~]$ echo $SSH_CONNECTION
มันควรจะกลับมา: IP และพอร์ตของคุณและ IP ของคุณเชื่อมต่อกับและพอร์ต
192.168.0.13 50473 192.168.0.22 22
นอกจากนี้คุณยังสามารถรับข้อมูลบางอย่างจากการใช้tty
หรือwho
( w
): (แก้ไข: ฉันเห็นว่าตอนนี้เป็นรายการด้านบนในโพสต์อื่น)
[user1@host ~]$ who
user1 tty1 2018-01-03 18:43
user2 pts/0 2018-01-03 18:44 (192.168.0.13)
SECONDS
ทั่วโลก คุณสามารถใช้สิ่งนี้ผ่านทางecho $SECONDS
ซึ่งมันจะแสดงระยะเวลาตั้งแต่การเชื่อมต่อที่รับรู้
ขยายคำตอบของ @ sebelk:
โซลูชันที่ใช้netstat
นั้นดี แต่ต้องมีสิทธิ์ใช้งานรูต นอกจากนี้net-tools
แพคเกจ (ซึ่งจัดให้มีnetstat
) ถูกคัดค้านใน Linux distro รุ่นใหม่ ( https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/ )
วิธีการแก้ปัญหาที่เป็นทางเลือกแล้วที่จะใช้ทดแทน,netstat
ss
ตัวอย่างเช่น (โปรดทราบว่าคุณไม่ต้องการรูทอีกต่อไป):
user@router:~# ss | grep ssh
tcp ESTAB 0 0 192.168.1.136:ssh 192.168.1.147:37620
tcp ESTAB 0 0 192.168.1.136:ssh 192.168.1.147:37628
คุณสามารถใช้ได้
last | head
ฉันใช้สิ่งนี้ในสคริปต์ .login ของฉันเป็นเวลาหลายปีเพื่อดูว่าใครเพิ่งล็อกอินเข้าสู่ระบบ เป็นอุปกรณ์รักษาความปลอดภัยที่ไม่ดีเพื่อดูว่ามีใครบางคนอยู่ในระบบโดยใช้ข้อมูลเข้าสู่ระบบของคุณ
last
อาจไม่ปรากฏ
last
สนับสนุนรุ่น-p
ไหน? มันทำอะไร?
"last from util-linux 2.31.1"
มันแน่นอน
who -a
คำสั่ง