Как я могу получить комментарий текущего ssh-ключа authorized_keys?

Изменить: что мне действительно нужно знать WHICH ssh key из authorized_keys используется для идентификации текущего пользователя.

По словам «человек sshd»:

  • Linux: расширенная настройка загрузчика Grub?
  • Как увеличить размер раздела в Linux (ubuntu 9.04)?
  • Как создать фильм из нескольких .bmp-файлов под Linux?
  • Определение размера кэша L2 в Linux
  • Как подключить файловую систему NTFS, разрешая всем пользователям полный доступ?
  • Как использовать rsync с ПК с ОС Windows на удаленном сервере Linux?
  • Protocol 2 public key consist of options, keytype, base64-encoded key, comment. 

    Я вижу, что, когда я использую ssh-keygen, комментарий обычно является локальным идентификатором пользователя. Есть ли способ получить доступ к этому значению, когда я нахожусь на удаленном компьютере? (Вид вроде командной строки SSH_CLIENT)

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

  • Как мне удалить встроенный ключ Windows 8+ из среды Linux?
  • X11 с уже запущенным окном?
  • Переустановите драйвер USB Ubuntu
  • Пакетное переименование файлов в каталоге с помощью sed
  • Можете ли вы объяснить, как понять, что отображает команда «iwconfig» в Ubuntu-9.04?
  • Есть ли способ скопировать текст в htop?
  • 5 Solutions collect form web for “Как я могу получить комментарий текущего ssh-ключа authorized_keys?”

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

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

    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 you@192.168.1.2 exec "netstat -et | grep 56120"  
      Tcp 0 0 имя хоста: 56120 localhost: ssh ESTABLISHED user1 9937126
                         ----- ----- 
    

    Вы указали user1@192.168.1.2 .

    Это для удобства из страницы 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

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