Я создал сценарий оболочки, который задает подключенному пользователю вопрос, а затем выдает ему подсказку. Оболочка отправляет вопрос в базу данных для регистрации. Проблема в том, что наши разработчики используют общую учетную запись, но у каждого пользователя есть свой закрытый ключ. Есть ли способ прочитать с помощью сценария оболочки (bash), какой открытый ключ имеет подключенный пользователь?
Аналогичная подсказка была на Unix и Linux SE. Имея это в виду, вы можете найти последнюю запись в журналах для подключающегося IP:
REMOTE_IP=${SSH_CONNECTION%% *}
grep -B1 ${REMOTE_IP} /var/log/auth.log
Предположим, вы используете debian, журналы sshd идут в auth.log
. Если использовать дистрибутив, подобный RH, они будут в secure.log
.
Вы можете поднять уровень ведения журнала sshd до VERBOSE, установив директиву LogLevel в /etc/ssh/sshd_config
LogLevel DEBUG
это заставляет sshd регистрировать следующее для каждого соединения
Aug 17 12:16:20 centos sshd[9587]: Connection from 192.168.254.200 port 58107
Aug 17 12:16:20 centos sshd[9587]: Found matching RSA key: 54:d2:06:cf:85:ac:89:f6:3c:a8:73:c7:a1:30:c2:8b
Aug 17 12:16:20 centos sshd[9588]: Postponed publickey for user from 192.168.254.200 port 58107 ssh2
Aug 17 12:16:20 centos sshd[9587]: Found matching RSA key: 54:d2:06:cf:85:ac:89:f6:3c:a8:73:c7:a1:30:c2:8b
Aug 17 12:16:20 centos sshd[9587]: Accepted publickey for user from 192.168.254.200 port 58107 ssh2
Aug 17 12:16:20 centos sshd[9587]: pam_unix(sshd:session): session opened for user user by (uid=0)
Переменная среды SSH_CONNECTION содержит информацию о текущем соединении.
192.168.254.200 58107 192.168.254.89 22
<sourece IP> <source port> <destination IP> <destination port>
Немного написав сценарии, можно будет соединить их вместе.