Как я могу получить комментарий текущего ssh-ключа authorized_keys?
Изменить: что мне действительно нужно знать WHICH ssh key из authorized_keys используется для идентификации текущего пользователя.
По словам «человек sshd»:
Protocol 2 public key consist of options, keytype, base64-encoded key, comment.
Я вижу, что, когда я использую ssh-keygen, комментарий обычно является локальным идентификатором пользователя. Есть ли способ получить доступ к этому значению, когда я нахожусь на удаленном компьютере? (Вид вроде командной строки SSH_CLIENT)
- Ubuntu: AMD64 против i386?
- Добавить загрузочные записи Windows после установки Ubuntu?
- Grub2 не может загружать Windows 7 с ошибкой «недопустимая подпись»
- Google Chrome - мышь не меняется
- Как скопировать / вставить символы табуляции через буфер обмена в сеанс терминала на gnome / ubuntu
(Предполагая, что я использую комментарий как удаленный идентификатор какого-либо типа, я хотел бы зарегистрировать это из shell-скрипта! Это на ubuntu)
- VirtualBox Ubuntu не может подключиться к Интернету
- Можете ли вы установить Ubuntu Server в Windows PC VM на Windows 7?
- Ubuntu grep, find и т. Д.: Вывод «Разрешение отказано» и «Нет такого файла или каталога»
- Как сделать cut / copy / paste в GVim на Ubuntu работать с Ctrl + X, Ctrl + C, Ctrl + V?
- Xubuntu Chromium NET :: ERR_CERTIFICATE_TRANSPARENCY_REQUIRED
- Как узнать MAC-адрес моего адаптера WiFi на Ubuntu Linux?
- Сохранить заполненную форму в pdf-файле в ubuntu
- Как полностью отключить процесс от терминала?
Я лично не рекомендовал бы это решение, но опубликую его для обсуждения.
Если вы хотите:
- Изменение уровня ведения журнала SSHd
- Дайте вашему скрипту доступ к / var / log / secure (или эквивалентный файл журнала)
Вы можете установить «LogLevel DEBUG» в sshd_config для получения следующих записей каждый раз, когда ключ ssh успешно используется для аутентификации:
Aug 13 11:51:13 myhost sshd[20195]: debug1: matching key found: file /home/myuser/.ssh/authorized_keys, line 3 Aug 13 11:51:13 myhost sshd[20195]: Found matching DSA key: 00:aa:bb:cc:dd:ee:00:c0:0b:fa:ce:00:00:ab:cd:ef
Написание сценария для анализа журналов и получения соответствующей информации было бы тривиальным. Вероятно, вы можете использовать grep для «sshd [$ PPID]», чтобы уменьшить строки, которые должен выполнить скрипт.
Обратите внимание, что изменение loglevel на DEBUG значительно увеличит размер ваших журналов и может нарушить конфиденциальность пользователей. От "man sshd_config":
Регистрация с уровнем DEBUG нарушает конфиденциальность пользователей и не рекомендуется.
Я уверен, что есть несколько шагов, которые можно предпринять, чтобы сделать это решение немного менее страшным (например, вносить в журнал sshd информацию DEBUG в другой файл и контролировать доступ к этому файлу и сценарию), но в конце, если в этот день он все равно будет Вы съеживаетесь.
Это поможет, если вы хотите отслеживать логин из сценария на машине SSHd
.
Шаг 1 : переменная оболочки « SSH_CLIENT
» дает вам две части информации
- Удаленный IP-адрес (
192.168.1.2
в строке ниже) - Удаленный TCP-порт, через который клиент подключился (
56120
ниже)
SSH_CLIENT = '192.168.1.2 56120 22' ----------- ----- Исходный IP-порт
Шаг 2. Теперь вы можете выполнить вход (назад) в исходный IP (192.168.1.2) и проверить UserID
.
SSHd-Server $ ssh [email protected] exec "netstat -et | grep 56120" Tcp 0 0 имя хоста: 56120 localhost: ssh ESTABLISHED user1 9937126 ----- -----
Вы указали [email protected]
.
Это для удобства из страницы man ssh-keygen
на Debian:
Для ключей RSA1 в ключевом файле есть поле комментариев, которое только для удобства пользователя помогает идентифицировать ключ. Комментарий может сказать, для чего нужен ключ, или что-то полезное. Комментарий инициализируется «user @ host» при создании ключа, но может быть изменен с помощью опции -c.
Я думаю, что ближайший вы собираетесь определить, какой ключ был использован для входа в систему, – это с помощью ssh-add
, с -L, с man-страницы:
-L Перечисляет параметры открытого ключа всех идентификаторов, представленных в настоящее время агентом.
Вы можете увеличить уровень регистрации демона ssh до DEBUG1:
LogLevel DEBUG1
И в журнале будет отображаться отпечаток RSA ключа SSH, используемый для входа в систему:
Aug 13 08:52:56 ubuntu_test sshd[17115]: debug1: matching key found: file /home/username/.ssh/authorized_keys, line 1 Aug 13 08:52:56 ubuntu_test sshd[17115]: Found matching RSA key: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
Вы можете получить отпечаток ключа с помощью ssh-keygen
:
-l Показывать отпечаток указанного файла открытого ключа. Также поддерживаются частные ключи RSA1. Для ключей RSA и DSA ssh-keygen пытается найти соответствующий файл открытого ключа и распечатывает свой отпечаток. Если в сочетании с -v, представление ASCII-изображения ключа предоставляется с отпечатком пальца.
В авторизованном файле ключей вам нужно будет разделить каждую строку на новый файл для чтения с помощью ssh-keygen -l
. Вот пример скрипта Ruby, который будет делать это:
#!/usr/bin/env ruby File.open("/home/username/.ssh/authorized_keys").each do |l| file_name = l.split(" ")[2] key_file = File.new("#{file_name}.pub_key", "w") key_file.puts l key_file.close puts %x{ssh-keygen -l -f #{file_name}.pub_key} end
Если у вас есть открытый ключ (подозреваемого пользователя), вы можете искать подпись в auth.log
. Сопоставьте это с выходом (обратите внимание, что -l
здесь small -L
):
ssh-keygen -l <enter>
Эта команда запросит путь к открытому ключу и выведет подпись для этого ключа.
Поскольку я не мог найти полный ответ в сети, я написал свой собственный bash scritp:
#!/bin/bash cat /root/.ssh/authorized_keys | while read KEY; do echo ""; name=$(echo "$KEY" | cut -d ' ' -f3-); file_name=$(echo "$name" | tr ' ' '_'); echo $KEY > $file_name; fingerprint=$(ssh-keygen -l -f $file_name); rm -f $file_name; echo "$name login's"; logins=$(grep `echo "$fingerprint" | awk '{print $2}'` /var/log/secure*); logins_count=$(echo "$logins" | wc -l); echo "Total Login's: $logins_count"; if [ -n "$logins" ]; then login_pids=$(echo "$logins" | perl -p -e 's/.*\[(.*)\].*/$1/g'); for f in `ps -e | grep 'sshd' | awk '{print $1}' | grep "$login_pids"`; do [ -n "$f" ] && echo "Current sessions pid: $f"; done; fi; done;
наслаждаться! Wesley