Если вы используете SSH и ваш закрытый ключ зашифрован кодовой фразой, то вам все равно будет предложено ввести кодовую фразу / пароль для закрытого ключа при выполнении сетевых операций с Git как push
, pull
и fetch
.
Используйте ssh-agent, чтобы сохранить парольную фразу / пароль секретного ключа.
Если вы не хотите вводить кодовую фразу каждый раз, вы можете использовать ssh-agent
для сохранения учетных данных секретной ключевой фразы один раз за сеанс терминала, как я объясняю в мой ответ на Не удалось открыть соединение с вашим агентом аутентификации:
$ eval `ssh-agent -s`
$ ssh-add
В Windows msysgit Bash вам нужно оценить вывод ssh-agent
, но я не уверен, нужно ли вам делать то же самое в других средах разработки и операционных системах.
ssh-add
ищет закрытый ключ в вашей домашней .ssh
папке с именем id_rsa
, которое является именем по умолчанию, но вы можете передать путь к файлу ключу с другим именем.
Убить агента
Когда вы закончите сеанс терминала, вы можете завершить работу ssh-agent
с помощью флага уничтожения -k
:
$ ssh-agent -k
Как объясняется в ssh-agent
руководстве:
-k
Убить текущего агента (заданного переменной среды SSH_AGENT_PID).
Дополнительный тайм-аут
Кроме того, он может принимать необязательный параметр тайм-аута, например:
$ ssh-add -t <timeout>
где <timeout>
имеет формат <n>h
для <n>
часов, <n>m
для <n>
минут и т. д.
Согласно ssh-agent
manual:
-t life
Задайте значение по умолчанию для максимального времени жизни идентификаторов, добавленных к агенту. Время жизни может быть указано в секундах или в формате времени, указанном в sshd_config (5). Время жизни, указанное для удостоверения с помощью ssh-add (1) переопределяет это значение. Без этой опции максимальное время жизни по умолчанию - вечно.
Подробнее см. на этой странице форматы времени.
Предупреждение безопасности для пользователей Cygwin
Пользователи Cygwin должны знать о потенциальном риске безопасности при использовании ssh-agent в Cygwin.:
люди должны знать о потенциальных опасностях ssh-agent в Cygwin 1, хотя при локальном netstat и удаленном сканировании портов не видно, что порт, указанный в / tmp / ssh-foo, доступен для всех ...?
[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
И по указанной ссылке:
однако обратите внимание, что доменные сокеты Cygwin для Unix ФУНДАМЕНТАЛЬНО НЕ БЕЗОПАСНЫ, и поэтому я категорически НЕ ОБЕСПЕЧИВАЮ использования ssh-agent под Cygwin.
когда вы запускаете ssh-agent под Cygwin, он создает сокет AF_UNIX в каталоге /tmp/ssh-$USERNAME/
. В Cygwin сокеты AF_UNIX эмулируются через сокеты AF_INET. В этом легко убедиться, если заглянуть в /tmp/ssh-$USERNAME/agent-socket-*
файл через Блокнот. Вы увидите что-то вроде
!<socket >2080
потом запускай netstat -a
и удивляйся! У вас есть программа, которая слушает порт 2080. Это ssh-agent. Когда ssh получает запрос RSA от сервера, он обращается к соответствующему /tmp/ssh-$USERNAME/agent-socket-*
(в нашем случае в Cygwin это означает, что он откроет соединение с localhost:2080
) и просит ssh-agent обработать запрос RSA с помощью имеющегося у него закрытого ключа, а затем он просто передает ответ, полученный от ssh-agent, на сервер.
В Unix такой сценарий работает без проблем, потому что ядро Unix проверяет разрешения, когда программа пытается получить доступ к сокету AF_UNIX. Однако для сокетов AF_INET соединения являются анонимными (читай «небезопасными»). Представьте, что у вас запущен ssh-агент Cygwin. Злоумышленник может просканировать ваш ящик, найти открытый порт, используемый ssh-agent, открыть соединение с вашим SSH-сервером, получить от него запрос RSA, отправить его вашему ssh-агенту через открытый порт, который он / она нашел, получить Ответ RSA, отправьте его на сервер SSH и вуаля, он / она успешно вошли на ваш сервер как вы.
person
Community
schedule
21.08.2013