Ho appena SSH in root e poi SSH in root sulla stessa macchina. Quindi ho due finestre aperte sia su SSH che su root sul mio computer remoto.
Dalla shell, come posso vedere un elenco di queste due sessioni?
Ho appena SSH in root e poi SSH in root sulla stessa macchina. Quindi ho due finestre aperte sia su SSH che su root sul mio computer remoto.
Dalla shell, come posso vedere un elenco di queste due sessioni?
Risposte:
who
oppure w
; who -a
per ulteriori informazioni.
Questi comandi mostrano solo tutte le sessioni di accesso su un dispositivo terminale. Una sessione SSH sarà su uno slave pseudo-terminale ( pts
) come mostrato nella TTY
colonna, ma non tutte le connessioni pts sono sessioni SSH. Ad esempio, i programmi che creano un dispositivo pseudo-terminale come xterm
o screen
mostreranno come pts
. Vedi Differenza tra pts e tty per una migliore descrizione dei diversi valori trovati nella TTY
colonna. Inoltre, questo approccio non mostrerà nessuno che ha effettuato l'accesso a una sessione SFTP, poiché le sessioni SFTP non sono sessioni di accesso alla shell.
Non conosco alcun modo per mostrare esplicitamente tutte le sessioni SSH. Puoi inferire queste informazioni leggendo le informazioni di accesso da utmp
/ wtmp
tramite uno strumento come last
, w
o who
come ho appena descritto, oppure utilizzando strumenti di rete come @sebelk descritti nella loro risposta per trovare connessioni tcp aperte sulla porta 22 (o ovunque il tuo SSH demone / i è / stanno ascoltando).
Un terzo approccio che potresti adottare è analizzare l'output del log dal demone SSH. A seconda della distribuzione del sistema operativo, della distribuzione SSH, della configurazione e così via, l'output del registro potrebbe trovarsi in diverse posizioni. In un box RHEL 6, ho trovato i log in /var/log/sshd.log
. Su un box RHEL 7 e anche su un box Arch Linux, dovevo usare journalctl -u sshd
per visualizzare i log. Alcuni sistemi potrebbero generare log SSH su syslog. I tuoi registri potrebbero trovarsi in questi luoghi o altrove. Ecco un esempio di ciò che potresti vedere:
[myhost ~]% cat /var/log/sshd.log | grep hendrenj | grep session
May 1 15:57:11 myhost sshd[34427]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May 1 16:16:13 myhost sshd[34427]: pam_unix(sshd:session): session closed for user hendrenj
May 5 14:27:09 myhost sshd[43553]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May 5 18:23:41 myhost sshd[43553]: pam_unix(sshd:session): session closed for user hendrenj
I registri mostrano quando le sessioni si aprono e si chiudono, a chi appartiene la sessione, da dove l'utente si sta connettendo e altro. Tuttavia, dovrai eseguire molte analisi se vuoi ottenere questo da un semplice registro di eventi leggibile dall'uomo a un elenco di sessioni attualmente attive, e probabilmente non sarà ancora un elenco accurato quando hai terminato l'analisi, dal momento che i log in realtà non contengono abbastanza informazioni per determinare quali sessioni sono ancora attive - essenzialmente stai solo indovinando. L'unico vantaggio che si ottiene utilizzando questi registri è che le informazioni provengono direttamente da SSHD anziché tramite una fonte di seconda mano come gli altri metodi.
Raccomando solo di usare w
. Il più delle volte, questo ti fornirà le informazioni che desideri.
Puoi vedere ogni sessione ssh con il seguente comando:
[root@router ~]# netstat -tnpa | grep 'ESTABLISHED.*sshd'
tcp 0 0 192.168.1.136:22 192.168.1.147:45852 ESTABLISHED 1341/sshd
tcp 0 0 192.168.1.136:22 192.168.1.147:45858 ESTABLISHED 1360/sshd
O forse questo può essere utile:
[root@router ~]# ps auxwww | grep sshd:
root 1341 0.0 0.4 97940 3952 ? Ss 20:31 0:00 sshd: root@pts/0
root 1360 0.0 0.5 97940 4056 ? Ss 20:32 0:00 sshd: root@pts/1
root 1397 0.0 0.1 105300 888 pts/0 S+ 20:37 0:00 grep sshd:
pgrep -ai sshd
pgrep: invalid option -- 'i'
su Ubuntu 14.04.
-i
è disponibile solo sui gusti mac / bsd. su Ubuntu puoi usare pgrep -af ssd
. Per i dettagli, vedere serverfault.com/a/883270/116777
Puoi anche usare
ps ax | grep sshd
Aggiunto per riferimento semplice.
Se sei in una pseudo shell (esempio: / dev / pts / 0) uno dei modi più semplici sarebbe:
[user1@host ~]$ echo $SSH_CONNECTION
Dovrebbe restituire: il tuo IP e la tua porta e l'ip a cui sei connesso e la tua porta
192.168.0.13 50473 192.168.0.22 22
Puoi anche ottenere alcune informazioni usando tty
o who
( w
): (modifica: vedo che ora è elencato sopra in un altro post)
[user1@host ~]$ who
user1 tty1 2018-01-03 18:43
user2 pts/0 2018-01-03 18:44 (192.168.0.13)
SECONDS
globale. È possibile utilizzare questo tramite echo $SECONDS
, che visualizza quindi la quantità di tempo, dal momento che la connessione percepita
Espandendo la risposta di @ sebelk:
La soluzione utilizzata netstat
è valida ma richiede i privilegi di root. Inoltre, il net-tools
pacchetto (che fornisce netstat
) è stato deprecato in alcune nuove distro Linux ( https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/ ).
Una soluzione alternativa è quindi di utilizzare la sostituzione per netstat
, ss
. Ad esempio (nota che non hai più bisogno di root):
user@router:~# ss | grep ssh
tcp ESTAB 0 0 192.168.1.136:ssh 192.168.1.147:37620
tcp ESTAB 0 0 192.168.1.136:ssh 192.168.1.147:37628
Puoi usare
last | head
Ho usato questo nel mio script .login per anni per vedere chi si era recentemente connesso al sistema. Era un dispositivo di sicurezza per poveri per vedere se qualcuno era sul sistema usando il tuo login.
last
potrebbe non essere elencata.
last
supporti -p
? Che cosa fa?
"last from util-linux 2.31.1"
ha di sicuro.
who -a
comando