У меня есть локальная машина с парой ключей ssh с общедоступной на github. Как мы все знаем, это позволяет мне взаимодействовать с Github без необходимости каждый раз вводить имя пользователя/пароль.
У меня также есть удаленная машина, к которой я могу подключиться по ssh, используя тот же открытый ключ. Код Visual Studio позволяет мне взаимодействовать с этой машиной через рабочее пространство. И я заметил, что когда я запускаю команды git через его терминальный интерфейс, я не получаю запрос пароля.
Когда я пытаюсь запустить те же команды git через сеанс ssh, который я начал через свой терминал, мне предлагается ввести пароль.
Как Visual Studio Code достигает этого? Как я могу добиться этого с помощью сеанса ssh, запущенного через мой обычный терминал? Обратите внимание, что я не хочу размещать свою пару ключей на этой удаленной машине.
Я использую Убунту 20.04
РЕДАКТИРОВАТЬ
Я просто хочу отметить, что этот вопрос может стать более интересным, когда github удалит опцию аутентификации по паролю позже в следующем году.
Это Убунту 20.04.
Хорошо. Скорее всего, это агентская переадресация. Я напишу ответ.
Интересно, почему вы просто не добавляете открытый ключ удаленной машины в свою учетную запись GitHub?
@NicolasVoron (на высоком уровне - ответ в том, что я новичок в этом, и это не казалось мне таким очевидным) Я отказался от этого на раннем этапе, потому что это был новый клиент и не хотел, чтобы кто-либо мог получить доступ репо сразу ... Но теперь, когда вы напомнили мне, имеет смысл сделать это ... и добавить моего собственного пользователя на машины в качестве дополнительного уровня защиты.
@NicolasVoron О, так много причин. Кому принадлежит удаленная машина? Если это не вы, то у вас есть всевозможные проблемы с безопасностью, связанные с предоставлением чужой машине прямого доступа к вашей учетной записи github. Хотя переадресация агента также может открыть тот же бэкдор, он открыт только тогда, когда вы вошли в систему, и, таким образом, меньшая поверхность атаки.
@NicolasVoron Также читайте здесь заголовок Разрастание SSH-ключей представляет угрозу безопасности и эксплуатации
@PhilipCouling спасибо за это. Я сейчас как лист, качающийся на ветру!
@PhilipCouling Вы правы. Я интерпретировал «у меня есть удаленная машина» как «у меня есть другая машина». Но если он не является владельцем этой второй машины, то агентская переадресация — это выход.
Канонический способ сделать это на терминале — использовать переадресацию агента.
Принцип заключается в том, что у вас есть «Агент», работающий на вашем локальном компьютере, который имеет доступ к вашим закрытым ключам. Обычно агент загружает и расшифровывает ваши закрытые ключи в память. Когда вы подключаетесь по ssh к удаленному компьютеру, вы указываете «Переадресация агента», чтобы предоставить удаленному компьютеру доступ к вашему локальному агенту через ваше SSH-соединение.
Это позволяет вашему пользователю (и «root») на удаленной машине запрашивать у вашего локального агента подпись запросов на подключение ssh.
Предполагая хост * nix или Mac, вы, скорее всего, используете OpenSSH для своего клиента. Чтобы настроить агент и добавить к нему свой закрытый ключ:
ssh-add
Или, если у вас есть специальное имя для вашего закрытого ключа, введите:
ssh-add path/to/private/key
Затем, когда вы подключаетесь к удаленному компьютеру по ssh, просто добавьте переключатель -A
для пересылки агента:
ssh -A remote-machine
Это позволит вашему пользовательскому сеансу (и root) использовать ваш локальный ключ SSH вместо того, что хранится на удаленном хосте. Git неявно выберет использование агента, вам не нужно давать ему никаких специальных инструкций.
Если вы используете Windows и Putty, то стоит упомянуть pageant, который работает с Putty. Это эквивалент Windows для использования ssh-add. Он имеет свой собственный графический интерфейс, который не требует пояснений.
Потрясающе работает! Одна вещь, которая меня сбила с толку, это то, что я забыл изменить URL-адрес http на ssh в .git/config
. Баунти будет вознаграждена через 23 часа
Какая ОС является вашей хост-машиной (под управлением VS Code)?