Perintah Log Jalankan SSH di Sisi Klien

0

Saya mencari cara untuk menjalankan SSH (khususnya OpenSSH, tetapi tidak harus) dan mencatat semua perintah yang saya jalankan terhadap remote, ke file secara lokal.

Menjalankan setiap perintah sebagai perintah ssh independen memang akan mencatat setiap perintah ke riwayat lokal saya, tetapi umumnya tidak diinginkan untuk menjalankan mis.

ssh [email protected] -- foo -a --bar baz

untuk setiap perintah.

Saya lebih suka ssh ke server dengan cara biasa, baik melalui ssh sendiri, atau melalui perintah wrapper, seperti 'ssh-logging'.

Saya membayangkan input perintah program yang disimpan melalui ssh ke dalam file di mesin klien lokal sebanding dengan bagaimana shell melakukannya, misalnya ~ / .ssh_history tampaknya seperti default yang baik, mungkin diijinkan per kombinasi pengguna + host, tapi saya tidak sangat peduli di mana ia menyimpan saat ini.

Singkatnya, saya ingin sesuatu seperti yang berikut terjadi:

~ $ ssh [email protected]
[user@host ~]$ foo --bar
[user@host ~]$ exit
~ $ cat .ssh_history_user@host
foo --bar
exit
~ $

Apakah hal semacam itu ada, baik sebagai konfigurasi klien OpenSSH yang tidak jelas, atau sebagai bagian dari klien open-source / libre ssh lainnya, atau sebagai program pembungkus tipis yang dapat dengan mudah menempatkan diri pada input stdin pengguna, dan mengirim secara transparan mereka ke stdin dari program yang sedang berjalan saat login mereka? (Saya dengar SecureCRT memiliki fitur pencatatan yang mungkin kira-kira seperti ini, tetapi setidaknya dalam kehidupan pribadi saya, saya tidak memiliki keinginan untuk menggunakan alat-alat non-FLOSS).

mtraceur
sumber
Apa yang menghentikan Anda ssh user@host | tee ssh.log?
Eugen Rieck
@EugenRieck Ketidaktahuan dan kurangnya intuisi terasah yang cukup mengenai banyak alat di kotak perintah * nix command-line yang khas, adalah apa yang menghentikan saya. Saya pikir Anda baru saja menjawab pertanyaan saya. Terima kasih!
mtraceur

Jawaban:

0

Jika Anda menggunakan unix, utilitas standar scriptdirancang untuk tujuan ini. Jika Anda menjalankan scripttanpa argumen, itu memulai salinan shell Anda dan mencatat sesi ke file bernama "naskah":

~ jdoe$ script
Script started, output file is typescript
bash-3.2$ date
Fri May  8 16:29:44 EDT 2015
bash-3.2$ exit
exit

Script done, output file is typescript
~ jdoe$ cat typescript
Script started on Fri May  8 16:29:42 2015
bash-3.2$ date
Fri May  8 16:29:44 EDT 2015
bash-3.2$ exit
exit

Script done on Fri May  8 16:29:45 2015
~ jdoe$ 

Anda dapat menentukan file untuk login dan perintah untuk menjalankan bukan shell. Bagian ini tidak sepenuhnya standar. Di sistem OSX saya, Anda akan menjalankannya seperti ini:

script name-of-log-file command arg...
eg
script ssh-log ssh user@somehost

Dengan versi linux yang umum, Anda akan menjalankannya seperti ini:

script -c 'command arg...' name-of-log-file
eg
script -c 'ssh user@somehost' ssh-log
Kenster
sumber
Permintaan maaf atas jawaban yang terlambat. Saya ragu-ragu tentang menerima jawaban ini, tetapi saya memang memilihnya karena saya menemukan itu membantu (pada saat penulisan ini, itu tidak muncul secara publik, karena saya tidak memiliki reputasi yang cukup, seperti yang saya mengerti).
mtraceur
Satu keuntungan lain dari ini yang telah saya temukan, dan mungkin yang layak ditambahkan ke jawaban Anda, adalah bahwa sebagian besar implementasi skrip juga dapat menghemat informasi waktu, dan dikombinasikan dengan skrip permainan untuk melihat apa yang terjadi, dengan waktu yang tepat untuk apa yang terjadi .
mtraceur
Setelah beberapa tahun memikirkan masalah ini (dan lebih dalam membahas filosofi Unix), saya memutuskan bahwa script, meskipun tidak selalu menghasilkan file portabel (misalnya saya telah melihat masalah antara GNU dan BusyBox yang scriptsaling mengatur waktu masing-masing. file), pada dasarnya adalah jawaban terbaik dan paling tepat yang akan didapat pertanyaan ini, jadi saya telah melanjutkan dan menerima jawaban ini juga.
mtraceur