Как я могу получить комментарий текущего 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)

(Предполагая, что я использую комментарий как удаленный идентификатор какого-либо типа, я хотел бы зарегистрировать это из shell-скрипта! Это на ubuntu)

Я лично не рекомендовал бы это решение, но опубликую его для обсуждения.

Если вы хотите:

  1. Изменение уровня ведения журнала SSHd
  2. Дайте вашему скрипту доступ к / 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

  • QEMU с пропуском GPU не запустится
  • Является ли мой Ubuntu установленным 32 или 64-битным?
  • Как обновить Ubuntu 9.04 до Ubuntu 9.10
  • Ubuntu, управлять запуском init
  • Выход терминала поиска
  • CHKDSK в Linux ...?
  • Установить зависимости для пакета dpkg?
  • Нет звука (USB-динамики) в Ubuntu 9.04 Jaunty Jackalope
  • Новичок: VirtualBox «нет загрузочного носителя»
  • Что мне нужно позаботиться при спячке и Ubuntu и Windows (среда с двойной загрузкой)
  • Ask.com удаляет другие поисковые системы из Firefox?
  • Interesting Posts

    Не удалось обновить EntitySet – поскольку он содержит элемент DefiningQuery и no

    Диапазон значений в C Int и Long 32 – 64 бит

    Добавление пользователя в собственность в дополнение к другому пользователю

    Regex соответствует URL-адресу

    Попытка запуска нескольких HTTP-запросов параллельно, но ограничена Windows (реестром)

    Сеть и маршрутизация частных IP-диапазонов

    Существует ли многопользовательское приложение для удаленного рабочего стола для Mac OS X?

    Зависимость Уокер сообщает, что IESHIMS.DLL и WER.DLL отсутствуют?

    Как изменить поля печати по умолчанию для Google Chrome

    Заполнение TreeView с помощью структуры каталогов файловой системы

    Как вернуть Google поиск Google на английский язык после экспериментов с новой функцией Chrome, которая обнаруживает, когда я меняю страну?

    Форматы математического уравнения

    Возможно ли иметь несколько PropertyPlaceHolderConfigurer в моем applicationContext?

    Как добавить маркированный список в приложение для Android?

    Как указать код выхода консольного приложения в .NET?

    Давайте будем гением компьютера.