Làm cách nào tôi có thể giữ một bản ghi cục bộ, được đánh dấu thời gian của tất cả các lệnh từ xa mà tôi sử dụng ssh
(máy khách openssh dòng lệnh bắt đầu thông qua bash
)?
Yêu cầu:
Thiết yếu:
- 100% phía khách hàng mà không cần dựa vào đăng nhập máy chủ
- Định cấu hình hoặc cài đặt cho mỗi người dùng với các bản ghi được lưu trong thư mục chính của người dùng.
- Hỗ trợ phân biệt giữa nhiều phiên đồng thời với nhiều người dùng và máy chủ khác nhau.
- Không xâm nhập (không cần kích hoạt mỗi lần và không can thiệp đáng kể vào việc sử dụng ssh)
Ưu tiên cao:
- Đầu ra không được ghi lại hoặc lọc ra càng nhiều càng tốt
- Các mục nhập mật khẩu không được ghi lại hoặc tập tin được mã hóa
- Cho biết các lệnh thực tế được sử dụng (sau khi hoàn thành tab / lịch sử, không gian, CTRL+ C, v.v ... đã được xử lý)
Rất vui được có:
- Đồng thời ghi lại các lệnh trong các phiên xích (các lệnh được nhập trong từ xa
ssh
hoặcsu <user>
phiên) - Phiên bắt đầu và kết thúc nên được ghi lại
- Một
bash
giải pháp không dựa trên cơ sở đơn giản sẽ là tốt nhất (có thể là một tập lệnhalias
hoặcbash
trình bao bọc chossh
lệnh?)
- Đồng thời ghi lại các lệnh trong các phiên xích (các lệnh được nhập trong từ xa
Cấp độ kỹ năng của tôi:
- Tôi không phải là người mới trong lập trình, nhưng vẫn đang học
bash
và "cách Linux", vì vậy các mẫu mã với các giải thích ngắn gọn sẽ được đánh giá cao nhất.
Chiến lược có thể
- keylogger - Vấn đề: ghi nhật ký mật khẩu, không ghi nhật ký hoàn thành tab / lịch sử (xem câu trả lời của glenn )
screen
với tính năng cuộn ngược lại một lần mỗi giây vàdiff
giữa chúng để tìm các dòng cuộn ngược mới - Vấn đề: làm thế nào điều này có thể được thực hiện theo cách tự động hữu ích?ssh "$@" | tee >(some_cleaner_function >> $logfile)
- Vấn đề: không thể xử lý các lệnh hoặc lịch sử đa dòng trong các phiên bị xích, cần dọn dẹp cẩn thận (xem câu trả lời của tôi)- Một sự kết hợp của một số ở trên
Một ví dụ
Phiên SSH sau:
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
Có thể dẫn đến một bản ghi tại, ~/logs/ssh.log
chẳng hạn như:
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]
Hoặc, có lẽ một nhật ký riêng sẽ được tạo cho mỗi phiên với dòng lệnh được sử dụng để bắt đầu phiên ở đầu tệp.