Как использовать локальный ключ Github ssh при выдаче удаленных команд git на другом компьютере через ssh

У меня есть локальная машина с парой ключей ssh ​​с общедоступной на github. Как мы все знаем, это позволяет мне взаимодействовать с Github без необходимости каждый раз вводить имя пользователя/пароль.

У меня также есть удаленная машина, к которой я могу подключиться по ssh, используя тот же открытый ключ. Код Visual Studio позволяет мне взаимодействовать с этой машиной через рабочее пространство. И я заметил, что когда я запускаю команды git через его терминальный интерфейс, я не получаю запрос пароля.

Когда я пытаюсь запустить те же команды git через сеанс ssh, который я начал через свой терминал, мне предлагается ввести пароль.

Как Visual Studio Code достигает этого? Как я могу добиться этого с помощью сеанса ssh, запущенного через мой обычный терминал? Обратите внимание, что я не хочу размещать свою пару ключей на этой удаленной машине.

Я использую Убунту 20.04


РЕДАКТИРОВАТЬ

Я просто хочу отметить, что этот вопрос может стать более интересным, когда github удалит опцию аутентификации по паролю позже в следующем году.

Какая ОС является вашей хост-машиной (под управлением VS Code)?

Philip Couling 18.12.2020 15:31

Это Убунту 20.04.

Alexander Soare 18.12.2020 15:34

Хорошо. Скорее всего, это агентская переадресация. Я напишу ответ.

Philip Couling 18.12.2020 15:35

Интересно, почему вы просто не добавляете открытый ключ удаленной машины в свою учетную запись GitHub?

Nicolas Voron 18.12.2020 15:37

@NicolasVoron (на высоком уровне - ответ в том, что я новичок в этом, и это не казалось мне таким очевидным) Я отказался от этого на раннем этапе, потому что это был новый клиент и не хотел, чтобы кто-либо мог получить доступ репо сразу ... Но теперь, когда вы напомнили мне, имеет смысл сделать это ... и добавить моего собственного пользователя на машины в качестве дополнительного уровня защиты.

Alexander Soare 18.12.2020 15:42

@NicolasVoron О, так много причин. Кому принадлежит удаленная машина? Если это не вы, то у вас есть всевозможные проблемы с безопасностью, связанные с предоставлением чужой машине прямого доступа к вашей учетной записи github. Хотя переадресация агента также может открыть тот же бэкдор, он открыт только тогда, когда вы вошли в систему, и, таким образом, меньшая поверхность атаки.

Philip Couling 18.12.2020 15:45

@NicolasVoron Также читайте здесь заголовок Разрастание SSH-ключей представляет угрозу безопасности и эксплуатации

Philip Couling 18.12.2020 15:48

@PhilipCouling спасибо за это. Я сейчас как лист, качающийся на ветру!

Alexander Soare 18.12.2020 15:50

@PhilipCouling Вы правы. Я интерпретировал «у меня есть удаленная машина» как «у меня есть другая машина». Но если он не является владельцем этой второй машины, то агентская переадресация — это выход.

Nicolas Voron 18.12.2020 16:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
9
599
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Канонический способ сделать это на терминале — использовать переадресацию агента.

Принцип заключается в том, что у вас есть «Агент», работающий на вашем локальном компьютере, который имеет доступ к вашим закрытым ключам. Обычно агент загружает и расшифровывает ваши закрытые ключи в память. Когда вы подключаетесь по 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 часа

Alexander Soare 18.12.2020 16:05

Другие вопросы по теме