Bagaimana saya bisa menyimpan catatan lokal, timestamped dari semua perintah jarak jauh yang saya gunakan ssh
(klien openssh baris perintah dimulai melalui bash
)?
Persyaratan:
Penting:
- 100% sisi klien tanpa mengandalkan server logging
- Dikonfigurasi atau diinstal per pengguna dengan log yang disimpan di direktori home pengguna.
- Dukungan untuk membedakan antara beberapa sesi simultan dengan berbagai pengguna dan host.
- Non-intrusif (tidak perlu mengaktifkannya setiap kali dan tidak mengganggu penggunaan ssh)
Prioritas utama:
- Entah output tidak dicatat atau disaring sebanyak mungkin
- Entri kata sandi tidak dicatat atau file dienkripsi
- Mengindikasikan perintah aktual yang digunakan (setelah tab / riwayat selesai, backspaces, CTRL+ C, dll ... telah diproses)
Senang bisa memiliki:
- Juga mencatat perintah dalam sesi berantai (perintah yang dimasukkan saat remote
ssh
atausu <user>
sesi) - Awal dan akhir sesi harus dicatat
- Sebuah
bash
solusi sederhana , non-root akan menjadi yang terbaik (mungkin skripalias
ataubash
pembungkus untukssh
perintah?)
- Juga mencatat perintah dalam sesi berantai (perintah yang dimasukkan saat remote
Tingkat keahlian saya:
- Saya bukan orang baru dalam pemrograman, tetapi saya masih belajar
bash
dan "Linux cara", jadi contoh kode dengan penjelasan singkat akan sangat dihargai.
Kemungkinan strategi
- keylogger - Masalah: kata sandi log, tidak mencatat tab / penyelesaian sejarah (lihat jawaban glenn )
screen
dengan scrollback dumping sekali per detik dan didiff
antara mereka untuk menemukan jalur scrollback baru - Masalah: bagaimana ini dapat diterapkan dengan cara otomatis yang bermanfaat?ssh "$@" | tee >(some_cleaner_function >> $logfile)
- Masalah: tidak dapat menangani perintah atau riwayat multiline dalam sesi berantai, pembersihan yang cermat diperlukan (lihat jawaban saya)- Kombinasi beberapa hal di atas
Sebuah contoh
Sesi SSH berikut:
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
Mungkin menghasilkan log di ~/logs/ssh.log
seperti:
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]
Atau, mungkin log terpisah akan dibuat untuk setiap sesi dengan baris perintah yang digunakan untuk memulai sesi di bagian atas file.