Réponses:
who
ou w
; who -a
pour plus d'informations.
Ces commandes affichent simplement toutes les sessions de connexion sur un terminal. Une session SSH sera sur un pseudo-terminal esclave ( pts
) comme indiqué dans la TTY
colonne, mais toutes les connexions pts ne sont pas des sessions SSH. Par exemple, les programmes qui créent un périphérique pseudo-terminal tel que xterm
ou screen
s’affichent comme pts
. Voir Différence entre pts et tty pour une meilleure description des différentes valeurs trouvées dans la TTY
colonne. De plus, cette approche n’indiquera à personne qui est connecté à une session SFTP, car les sessions SFTP ne sont pas des sessions de connexion shell.
Je ne connais aucun moyen de montrer explicitement toutes les sessions SSH. Vous pouvez déduire ces informations en lisant les informations de connexion depuis utmp
/ wtmp
via un outil tel que last
, w
ou who
comme je viens de le décrire, ou en utilisant des outils réseau tels que @sebelk, décrits dans leur réponse, pour rechercher des connexions tcp ouvertes sur le port 22 le (s) démon (s) écoute (s)).
Une troisième approche consiste à analyser la sortie du journal du démon SSH. Selon la distribution de votre système d'exploitation, la distribution SSH, la configuration, etc., la sortie de votre journal peut se trouver à différents endroits. Sur une boîte RHEL 6, j'ai trouvé les journaux /var/log/sshd.log
. Sur une boîte RHEL 7, et également sur une boîte Arch Linux, je devais utiliser journalctl -u sshd
pour afficher les journaux. Certains systèmes peuvent générer des journaux SSH vers syslog. Vos journaux peuvent être dans ces endroits ou ailleurs. Voici un exemple de ce que vous pourriez voir:
[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
Les journaux indiquent quand les sessions s'ouvrent et se ferment, à qui appartient la session, à partir duquel l'utilisateur se connecte, etc. Cependant, vous allez devoir faire beaucoup d'analyses si vous voulez obtenir cela d'un simple journal d'événements lisible par l'homme en une liste de sessions actives, et ce ne sera probablement pas une liste précise quand. vous avez terminé l'analyse, car les journaux ne contiennent pas assez d'informations pour déterminer les sessions qui sont toujours actives - vous ne faites que deviner. Le seul avantage que vous obtenez en utilisant ces journaux est que les informations proviennent directement de SSHD plutôt que via une source secondaire comme les autres méthodes.
Je recommande simplement d'utiliser w
. La plupart du temps, cela vous donnera les informations que vous souhaitez.
Vous pouvez voir chaque session ssh avec la commande suivante:
[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 peut-être cela peut être 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'
sur Ubuntu 14.04.
-i
est disponible uniquement sur les goûts Mac / BSD. sur Ubuntu, vous pouvez utiliser pgrep -af ssd
. Voir serverfault.com/a/883270/116777 pour plus de détails
Vous pouvez aussi utiliser
ps ax | grep sshd
Ajouté pour référence simple.
Si vous êtes dans un pseudo-shell (exemple: / dev / pts / 0), l’un des moyens les plus simples serait:
[user1@host ~]$ echo $SSH_CONNECTION
Il devrait renvoyer: votre ip et votre port et l'ip à laquelle vous êtes connecté et votre port
192.168.0.13 50473 192.168.0.22 22
Vous pouvez également obtenir des informations en utilisant tty
or who
( w
): (edit: je vois que c'est maintenant la liste ci-dessus dans un autre post)
[user1@host ~]$ who
user1 tty1 2018-01-03 18:43
user2 pts/0 2018-01-03 18:44 (192.168.0.13)
SECONDS
global. Vous pouvez utiliser ce via echo $SECONDS
, qui affiche ensuite la durée
Développer la réponse de @ sebelk:
L'utilisation de la solution netstat
est bonne mais nécessite des privilèges root. De plus, le net-tools
paquet (qui fournit netstat
) était déconseillé dans certaines distributions récentes de la distribution Linux ( https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/ ).
Une autre solution consiste alors à utiliser le remplacement pour netstat
, ss
. Par exemple (notez que vous n’avez plus besoin de 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
Vous pouvez utiliser
last | head
J'ai utilisé cela dans mon script .login pendant des années pour voir qui s'était récemment connecté au système. C'était un dispositif de sécurité pour homme pauvre pour voir si quelqu'un se trouvait sur le système en utilisant votre identifiant.
last
peut ne pas être répertoriée.
last
supports -p
? Qu'est ce que ça fait?
"last from util-linux 2.31.1"
a à coup sûr.
who -a
commande