Есть ли способ остановить вход по ssh без подтверждения? Когда кто-то хочет войти в мой компьютер, ssh выдает запрос на подтверждение входа, прежде чем он будет успешным.
В нашей университетской лаборатории все компьютеры имеют общие имена пользователей и пароли, так что любой, в основном студенты, могут получить доступ к компьютерам. Мне нужен способ, чтобы ssh мог предотвратить вход в систему, пока я не подтвердлю.
Точно так же, есть ли файл журнала, который я могу использовать, чтобы я знал, имеет ли кто-нибудь доступ к моему компьютеру?
SSH не был разработан для такого доступа по требованию. Однако, если вам нужно беспокоиться только о доступе к оболочке (или передаче файла), вы должны ограничить возможности SSH и добавить сценарий, который не запускает оболочку без вашего разрешения.
Что касается ограничения SSH, я принял участие в Как создать ограниченного пользователя SSH для переадресации портов? . Отредактируйте /etc/ssh/sshd_config
и добавьте:
Match user your-username
AllowAgentForwarding no
ForceCommand ~/bin/ssh-confirm
Создайте исполняемый файл ~/bin/ssh-confirm
(режим 755) и создайте скрипт / программу на языке по вашему выбору, который необходимо подтвердить перед удалением оболочки SSH, Например:
#!/bin/bash
confirmfile="$HOME/allow-ssh-for-pid-$"
if [ -f "$confirmfile" ]; then
echo "Old confirmation file found for the SSH session, exiting!"
exit 1
fi
# wait for a grant for 30 seconds before giving up
for ((i=0; i<30; i++)); do
if [ -f "$confirmfile" ]; then
rm "$confirmfile"
exec "$SHELL"
fi
sleep 1
done
echo "SSH access timed out."
exit 1
Для этого потребуется создать файл «allow-ssh-for-pid - $$», где $
- это pid скрипта, выполняемого из SSH. Вы можете использовать ps
, pidof
и т. Д. Для определения PID. Конечно, это может быть более изощренным, например, предупредить вас через notify
, но я предполагаю, что люди будут звонить вам, если попытаются связаться с вами.
Кроме того, я полагаю, что вы доверяете людям, которым вы предоставляете доступ по SSH. Если нет, создайте отдельного пользователя (без sudo
разрешений, конечно;)) и сохраните ssh-confirm
в таком месте, как /usr/local/bin
, и сохраните жетоны доступа в другом месте.
Попытки входа в систему SSH (и выхода из системы) регистрируются в /var/log/auth.log
. Запустите w
, чтобы получить список зарегистрированных пользователей (обратите внимание: вы получите несколько записей для терминалов, которые вы открываете на своем компьютере, обратите внимание на столбец FROM
).
/var/log/auth.log
Здесь вы можете просмотреть историю входа. Однако я не уверен, что есть элегантное решение того, о чем вы думаете, с помощью контроля доступа, так как все, что я могу придумать, это какая-то сумасшедшая схема, в которой вы используете rsync или что-то подобное для отмены и восстановления SSH ключи по мере необходимости.