ฉันจะเก็บบันทึกโลคัลที่บันทึกเวลาของคำสั่งรีโมตทั้งหมดที่ฉันใช้ในssh
(ไคลเอ็นต์ openssh บรรทัดคำสั่งเริ่มต้นผ่านbash
) ได้อย่างไร?
ที่ต้องการ:
ที่สำคัญ:
- ฝั่งไคลเอ็นต์ 100% โดยไม่ต้องอาศัยการบันทึกเซิร์ฟเวอร์
- กำหนดค่าหรือติดตั้งต่อผู้ใช้พร้อมบันทึกที่จัดเก็บในโฮมไดเรกทอรีของผู้ใช้
- การสนับสนุนสำหรับการแยกความแตกต่างระหว่างหลายเซสชันพร้อมกันกับผู้ใช้และโฮสต์ที่หลากหลาย
- ไม่รบกวน (ไม่จำเป็นต้องเปิดใช้งานในแต่ละครั้งและไม่รบกวนการใช้ ssh อย่างมีนัยสำคัญ)
ลำดับความสำคัญสูง:
- เอาต์พุตไม่ถูกล็อกหรือกรองออกให้มากที่สุด
- รายการรหัสผ่านอย่างใดอย่างหนึ่งจะไม่ถูกบันทึกหรือไฟล์ถูกเข้ารหัส
- บ่งชี้ถึงคำสั่งจริงที่ใช้ (หลังจากแท็บ / ประวัติเสร็จสมบูรณ์, backspaces, CTRL+ C, ฯลฯ ... ถูกประมวลผลแล้ว)
ยินดีที่ได้:
- ยังบันทึกคำสั่งในเซสชันที่ถูกล่ามโซ่ (คำสั่งที่ป้อนระหว่างระยะไกล
ssh
หรือsu <user>
เซสชัน) - ควรเริ่มต้นเซสชันและสิ้นสุดเซสชัน
- ง่าย
bash
-based, การแก้ปัญหาที่ไม่ใช่รากจะดีที่สุด (บางทีอาจจะเป็นalias
หรือbash
สคริปต์เสื้อคลุมสำหรับssh
คำสั่ง?)
- ยังบันทึกคำสั่งในเซสชันที่ถูกล่ามโซ่ (คำสั่งที่ป้อนระหว่างระยะไกล
ระดับความสามารถของฉัน:
- ฉันไม่ได้ใหม่กับการเขียนโปรแกรม แต่ยังคงเรียนรู้
bash
และ "วิธี Linux" ดังนั้นตัวอย่างโค้ดที่มีคำอธิบายสั้น ๆ จะได้รับการชื่นชมมากที่สุด
กลยุทธ์ที่เป็นไปได้
- keylogger - ปัญหา: บันทึกรหัสผ่านไม่บันทึกแท็บ / เสร็จสิ้นประวัติ (ดูคำตอบของ glenn )
screen
ด้วยการถ่ายโอนข้อมูลการเลื่อนครั้งเดียวต่อวินาทีและdiff
ระหว่างพวกเขาเพื่อค้นหาบรรทัดการเลื่อนใหม่ - ปัญหา: วิธีนี้สามารถนำมาใช้ในวิธีอัตโนมัติที่มีประโยชน์ได้อย่างไรssh "$@" | tee >(some_cleaner_function >> $logfile)
- ปัญหา: ไม่สามารถจัดการคำสั่งหลายบรรทัดหรือประวัติในช่วงที่ถูกล่ามโซ่จำเป็นต้องทำความสะอาดอย่างระมัดระวัง (ดูคำตอบของฉัน)- การรวมกันของบางอย่างข้างต้น
ตัวอย่าง
เซสชัน SSH ต่อไปนี้:
user@local:~$ ssh user@remote
Last login: Tue Jun 17 16:34:23 2014 from local
user@remote:~$ cd test
user@remote:~/test$ ls
a b
user@remote:~/test$ exit
อาจส่งผลให้บันทึกที่~/logs/ssh.log
เช่น:
2014-06-17 16:34:50 [user@remote - start]
2014-06-17 16:34:51 [user@remote] cd test
2014-06-17 16:34:52 [user@remote] ls
2014-06-17 16:34:53 [user@remote] exit
2014-06-17 16:34:53 [user@remote - end]
หรืออาจมีการสร้างบันทึกแยกต่างหากสำหรับแต่ละเซสชันด้วยบรรทัดคำสั่งที่ใช้ในการเริ่มเซสชันที่ด้านบนของไฟล์