Почему я должен убивать агента ssh -при выходе из системы?

Вы не можете просто отредактировать файл /etc/default/grubи ожидать, что система примет изменения. Я получил это откуда-то в сети, преобразование Ubuntu update -grub script:

#!/bin/sh
set -e
exec grub2-mkconfig -o /boot/grub2/grub.cfg "$@"

Запустите это (от имени root ), затем перезагрузите компьютер.

2
02.09.2021, 06:55
2 ответа

Если вы не отключите его вручную, агент останется резидентным в вашей системе.

Помимо общей неаккуратности, это имеет две потенциальные проблемы:

  1. Как отмечает Кусаналанда, это означает, что каждый раз, когда вы входите в систему, вы будете порождать другие ssh-agentпроцессы, что приводит к некоторой небрежности в таблице процессов, даже если их след, вероятно, незначителен.

  2. А если серьезно, каждый из этих процессов будет иметь ваши разблокированные приватные ключи в своей памяти. Если злоумышленник получит доступ к вашей системе и воспользуется (гипотетическим кодом, я в настоящее время не знаю ни о какой существующей )ошибке ни в управлении памятью ядра, ни в самом ssh-agentкоде для потенциального извлечения ваших закрытых ключей.

Конечно, последнее имеет низкую вероятность, но так же просто убить процесс и полностью устранить риск.

Лучше перестраховаться, чем потом сожалеть.

3
02.09.2021, 10:52

Вы не обязаны . Но вы, вероятно, хотите, по крайней мере, убедиться, что в памяти агента нет разблокированных ключей, и что вы не оставляете чрезмерное количество агентов без присмотра.

Для этого,ты мог бы:

  • Скажите агенту хранить ключи в памяти только в течение ограниченного периода времени (запустите его с помощью ssh-agent -t 1800на 30-минутный тайм-аут или используйте ssh-add -t 1800при добавлении ключей)
  • Попросите агента удалить все ключи при выходе(ssh-add -Dиз ваших сценариев выхода ); и
  • При входе в систему проверьте, запущен ли уже агент, и используйте его вместо запуска нового. Ниже приведен один из способов сделать это.
#.bashrc
start_ssh_agent() {
        if [ -e ~/.agent ]; then
               . ~/.agent
        fi
        ssh-add -l > /dev/null 2>&1
        if [ "$?" = "2" ] ; then
                # agent not running, start it
                ssh-agent -t 3600 |grep -v ^echo > ~/.agent
               . ~/.agent
                echo "Started SSH agent with PID $SSH_AGENT_PID"
        fi
}
start_ssh_agent

Конечно, есть и другие способы. В частности, вы можете использовать фиксированный путь к сокету агента. См., например. Как заставить агент ssh -работать на всех терминалах?

С другой стороны, если бы кто-то мог получить ключи от вашего SSH-агента, то есть прочитать программную память вашего процесса, он, вероятно, мог бы делать и другие вещи. Например, изменить настройки, чтобы отключить тайм-ауты, или установить модифицированный ssh-add, который отправляет им копию ключа и пароль.

1
02.09.2021, 11:11

Теги

Похожие вопросы