Есть ли способ рассказать, как пользователь аутентифицировал свое соединение SSH? т.е. будь то по паролю или с помощью открытого ключа?

Я блокирую свой сервер, чтобы использовать только открытый ключ. Я просто хочу убедиться, прежде чем перевернуть переключатель, который все мои пользователи уже сделали переход, и никто не остается использовать пароли для входа в систему.

На Ubuntu:

$ sudo cat /var/log/auth.log|grep ssh|grep Accept 

На CentOS / RHEL:

 $ sudo cat /var/log/secure|grep ssh|grep Accept 

Это покажет все подключения и их аутентификацию [с момента последнего вращения файла журнала].

Если вы хотите видеть только соединения с паролем, просто пройдите через другой grep:

  ... grep ssh|grep Accept|grep password 

А для бонусных очков краткий список пользователей, все еще использующих пароли (при условии, что вывод из приведенных выше команд показывает вам имя пользователя в 9-м столбце):

 ... grep password|awk '{print $9}'|sort|uniq 

Подход к переменной среды

Вот одна из возможностей. Если вы счастливы, что PermitUserEnvironment установлена ​​в true в вашем sshd_config тогда вы можете использовать комбинацию переменной среды с ключом и некоторую проверку в /etc/profile чтобы предупредить / отклонить любого, кто все еще использует подход с паролем ,

В файле $HOME/.ssh/authorized_keys вас будет что-то в этом направлении

 environment="KEYUSED=yes" ssh-dsa AAA... 

Если этот ключ был использован, переменная KEYUSED будет установлена ​​на «yes», когда запускается /etc/profile .

Подход входа в журнал

Другой подход, check / var / log / secure для записей, таких как это, когда использовался ключ

 Jul 29 13:58:20 localhost sshd[827]: Accepted publickey for steve from 192.168.124.1 port 50829 ssh2: RSA d3:35:bc:ed:c7:6f:11:27:44:f8:13:66:af:1e:8e:7e 

и записи, такие как это, где был использован пароль

 Jul 29 14:02:08 localhost sshd[1320]: Accepted password for foo from 127.0.0.1 port 57460 ssh2