Перед тем, как начать, следует использовать lsof
в соответствии с предложением @Drona, если lsof
и если доступ root / su / sudo доступен.
Для полноты картины я исследовал это для получения IP-адреса в настоящее время зарегистрированных пользователей SFTP в chroot для сценария nagios, для которого я не хотел создавать правило sudoers.
Простой способ (не такой простой, как lsof
и требует root, но для полноты)
Шаг 1
$ ps -ef | grep ssh
UID PID PPID C STIME TTY TIME CMD
root 2479 14186 0 17:05 ? 00:00:00 sshd: sftpuser [priv]
1008 2481 2479 0 17:06 ? 00:00:00 sshd: sftpuser@notty
1008 2482 2481 0 17:06 ? 00:00:00 sshd: sftpuser@internal-sftp
root 2483 14186 0 17:06 ? 00:00:00 sshd: ttyuser [priv]
ttyuser 2485 2483 0 17:06 ? 00:00:00 sshd: ttyuser@pts/0
Вы можете увидеть PID для пользователей ssh (добавлены столбцы ps для упрощения интерпретации)
Шаг 2
sudo lsof -p 2481 | grep TCP
sshd 2481 root 3u IPv4 29176657 0t0 TCP 192.168.1.2:44156 (ESTABLISHED)
Альтернатива (у более сложных есть возможность не нуждаться в руде)
Шаг 2. Требуется root-доступ, но не обязательно
$ sudo ls -l /proc/2481/fd
total 0
lrwx------ 1 root root 64 Jul 3 17:07 0 -> /dev/null
lrwx------ 1 root root 64 Jul 3 17:07 1 -> /dev/null
lr-x------ 1 root root 64 Jul 3 17:07 11 -> pipe:[29209918]
lrwx------ 1 root root 64 Jul 3 17:07 2 -> /dev/null
lrwx------ 1 root root 64 Jul 3 17:07 3 -> socket:[29209894]
lrwx------ 1 root root 64 Jul 3 17:07 5 -> socket:[29211080]
lr-x------ 1 root root 64 Jul 3 17:07 6 -> pipe:[29209915]
l-wx------ 1 root root 64 Jul 3 17:07 7 -> pipe:[29209915]
l-wx------ 1 root root 64 Jul 3 17:07 8 -> pipe:[29209916]
lr-x------ 1 root root 64 Jul 3 17:07 9 -> pipe:[29209917]
Шаг 3
$ fgrep 29209894 /proc/2481/net/tcp
8: 0101A8C0:0016 0201A8C0:B0B0 ...
здесь fgrep использует номер на носке и PID для извлечения информации.
Важная информация: 0101A8C0:0016
и 0201A8C0:B0B0
. Первый относится к серверу, а второй - к подключенному клиенту, где первая часть (разделенная двоеточием) представляет собой шестнадцатеричное представление обратного IP-адреса, а вторая - шестнадцатеричное представление порта. т.е.
0101A8C0 -> 1.1.168.192 -> 192.168.1.1
. Если вы знаете порт, который прослушивает сервер, вы можете пропустить Step 2
и использовать следующее вместо Step 3
.
Шаг 2 + 3 Замена при знании порта сервера - если рут недоступен
в этом случае, когда я проверял соединения SFTP через стандартный ssh-порт 22 (в шестнадцатеричном формате 0016)
$ fgrep 0016 /proc/2481/net/tcp
8: 0101A8C0:0016 0201A8C0:B0B0 ...