Використання директиви IdentityFile в ssh_config, коли використовується AgentForwarding


15

Чи можна вказати перенаправлені ключі за допомогою директиви IdentityFile в .ssh / config?

Я наткнувся на цю вигадку, коли намагався розгорнути якийсь код через Capistrano / GIT на нашому виробничому сервері. Як мій особистий, так і мій робочий ключі GIT завжди завантажуються в мій агент SSH, і так сталося, що мій особистий ключ був доданий до агента спочатку. Я використовую переадресацію агента під час розгортання з Capistrano, тому коли хост намагався ідентифікувати операцію `git pull`, він не вдався до наступної помилки:

ПОМИЛКА: В дозволі на "деяку репо" відмовлено "вашому користувачеві".

тому що він намагався пройти автентифікацію за допомогою мого особистого ключа git перед тим, як спробувати відповідний ключ (який пізніше з'явився в агенті ssh) і припустив, що я отримую доступ до іноземного репо, до якого я не маю дозволу на доступ. Я потенційно можу просто надати моєму особистому користувачеві доступ до кожної роботи репо, але на своїй локальній машині я можу обійти цю проблему, визначивши власні домени у .ssh / config так:

Хост personal.github.com Ім'я
хосту github.com
Користувач git
IdentityFile ~ / .ssh / some_key

Хост work.github.com
Hostname github.com
Користувач мерзотник
IdentityFile ~ / .ssh / some_other_key

і цей спосіб git ніколи не плутається. Чи можна створити .ssh / config правила для перенаправлених ключів на моїх виробничих коробках, щоб вони завжди знали, який ключ використовувати під час перетягування нового коду? В основному я хочу вміти:

Хост work.github.com
Hostname github.com
Користувач мерзотник
IdentityFile some_forwarded_key

Спасибі!

Відповіді:


22

Ви можете використовувати відкриту частину ключа, щоб вказати, який приватний ключ ви хочете використовувати від пересланого агента. Для цього потрібно створити додатковий файл (відкриту частину ключа) на будь-яких "проміжних" машинах (машинах, на які ви пересилаєте свій локальний ssh-агент ).

  1. Домовтеся, щоб проміжна машина мала копію відкритої частини потрібного ключа в зручному місці (наприклад ~/.ssh/some_other_key.pub).

    З будь-якої машини, яка вже має відкриту частину ключа:

    scp some_other_key.pub intermediate:.ssh/
    

    або, на проміжній машині:

    ssh-add -L | grep something_unique > ~/.ssh/some_other_key.pub
    

    Ви можете відредагувати частину відкритого ключа «коментар», що надається, щоб краще визначити походження / власника / мету ключа (або спробувати приховати те саме).

  2. Використовуйте ім'я шляху до вищезазначеного файла відкритого ключа за допомогою -iабо IdentityFile.

  3. Вам також може знадобитися використовувати IdentitiesOnly yes.ssh/configабо -o), щоб утримати ssh від спроб запропонувати будь-які додаткові посвідчення вашого пересланого агента.


Це єдине, що працювало для мене з 10 інших рішень.
Трейсі Фу

1
Граючи з цим, я зрозумів, що якщо ви помістите відкритий ключ, пов’язаний з приватним ключем, який ви хочете використовувати в ~ / .ssh / id_rsa.pub на проміжній машині, він буде використовуватися за замовчуванням, не потрібно ніякої конфігурації в ~ / .ssh / config.
bschlueter

Дякую Крису та bschlueter! Зараз я з'єднуюся з: ssh someserver -t "ssh-add -L | grep something_unique> ~ / .ssh / id_rsa.pub; cd some / other / folder; bash --login"
blablabla

Коли я пробую це з ssh -v -T ...сервером, він приймає відкритий ключ, але потім ssh каже No such identity: /home/name/.ssh/id_rsa: No such file or directoryі згодом аутентифікація не вдається. У всіх налаштуваннях увімкнено ForwardAgent. У чому може бути проблема?
Lars Nyström
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.