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


6

Редактировать: Что мне действительно нужно знать, КАКОЙ ключ ssh от авторизованного ключа используется для идентификации в настоящее время вошел в систему пользователя.

По словам "man sshd":

Protocol 2 public key consist of options, keytype, base64-encoded key, comment.

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

(Предполагая, что я ввожу комментарий в качестве удаленного идентификатора, я хотел бы записать это из сценария оболочки!


Интересно, удалось ли вам почти через 4 года найти решение этой проблемы? Я ищу что-то очень близкое к этому: чтобы идентифицировать пользователя / электронную почту, даже когда люди установили соединение как ROOT. Я бы даже зашел так далеко, чтобы доверять им, если бы они предоставили эту информацию в виде переменной ENV, которая будет передаваться с компьютера-клиента ssh на текущий сервер.
sorin

Ответы:


3

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

Если вы готовы:

  1. Изменить уровень ведения журнала SSHd
  2. Дайте вашему сценарию доступ к / Вар / журнал / безопасный (или эквивалентный файл журнала)

Вы можете установить «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]», чтобы уменьшить количество строк, которые должен выполнить скрипт.

Обратите внимание, что изменение уровня журнала на DEBUG значительно увеличит размер ваших журналов и может нарушить конфиденциальность пользователей. Из "man sshd_config":

Вход с уровнем DEBUG нарушает   конфиденциальность пользователей и не   рекомендуемые.

Я уверен, что есть несколько шагов, которые можно предпринять, чтобы сделать это решение немного менее страшным (например, запись информации sshd DEBUG в другой файл и контроль доступа к этому файлу и сценарию), но в конце дня, когда он все еще будет делать вы съеживаетесь


1
Согласно «man sshd», я должен иметь возможность добавить «команду» в поле опций каждого ключа ssh, и эта команда будет выполняться, когда ключ используется для аутентификации. Я полагаю, я мог бы использовать это, чтобы взломать что-то вместе. Я надеялся на менее пугающее решение
krosenvold

1
Я полагаю, что вариант среды еще проще
krosenvold

1

Это поможет, если вы хотите отслеживать вход из скрипта на SSHd машина.

Шаг 1 : Переменная оболочки ' SSH_CLIENT 'дает вам две части информации

  • Удаленный IP-адрес ( 192.168.1.2 в строке ниже)
  • Удаленный порт TCP, через который подключен клиент ( 56120 ниже)
    SSH_CLIENT='192.168.1.2 56120 22'  
                ----------- -----  
                 Source IP   Port

Шаг 2 : Теперь вы можете выполнить вход (в обратном направлении) к исходному IP (192.168.1.2) и проверить UserID,

SSHd-Server$ ssh you@192.168.1.2 exec "netstat -et  | grep 56120"  
 tcp  0  0 hostname:56120 localhost:ssh ESTABLISHED user1  9937126
                    -----                           ----- 

У тебя есть идентифицированный user1@192.168.1.2,


Но это решение требует, чтобы машина sshd могла входить на все клиентские машины.
krosenvold

@ krosenvold, вполне верно. Я предполагаю, что в целом среда Unix с SSHd владелец, имеющий хотя бы базовый доступ для входа на исходные машины.
nik

Я хочу, я хочу, но мои клиенты неоднородны
krosenvold

1

Это для удобства, из ssh-keygen Страница man на Debian:

Для ключей RSA1 в файле ключей также есть поле комментария   только для удобства пользователя   помогите определить   ключ. Комментарий может сказать, для чего нужен ключ или что   полезно. Комментарий инициализируется   «Пользователь @ хост»   когда ключ создан, но может быть изменен с помощью опции -c.

Я думаю, что ближайший, который вы получите для определения того, какой ключ использовался для входа, ssh-add, с -L, со страницы руководства:

-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

Да, это для удобства. Но я могу заставить это быть ценностью, которая мне хорошо известна. Мне просто нужно знать, какой ключ был использован для авторизации пользователя
krosenvold

1

Если у вас есть открытый ключ (подозреваемого пользователя), вы можете найти подпись в auth.log, Сопоставьте это с выводом из (обратите внимание, что -l здесь маленький -L ):

ssh-keygen -l <enter>

Эта команда запросит путь к открытому ключу и выведет подпись для этого ключа.


0

Поскольку я не мог найти полный ответ в сети, я написал свой собственный сценарий bash:

#!/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;

#

Редактировать: я написал это много лет спустя, надеюсь, что это может пригодиться кому-то https://github.com/sayajin101/SSH-Key-Login-Extended

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.