Як я можу переслати вже відправлений ключ ssh у tmux?


15

Я підключаюсь через SSH з машини, де зберігаються мої ключі, пересилаю на другу машину, а потім намагаюся використовувати ключі зсередини tmux. Я, здається, "втрачає" переадресацію під час введення tmux. Як можна "переслати знову", щоб я міг використовувати свої ключі зсередини tmux?

$ ssh [server] -o ForwardAgent=yes
$ git pull       # Succeeds.
$ /bin/bash
$ git pull       # Still succeeds, despite new shell.
$ exit
$ tmux attach
$ git pull       # Permission denied (publickey)

Я підтверджую, що якщо ви запустили агент, який ділиться між усіма вашими сеансами, він працює. Документація на bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html > Налаштування процесу ssh-agent Процес пояснює спосіб досягнення цього результату.
Дерексон

Також актуально: unix.stackexchange.com/questions/75681/…
Joe

Відповіді:


12

Якщо ви додаєте вже існуючий сеанс tmux, оболонка не успадковує змінні середовища від вашої оболонки входу. Зокрема, він не успадкує змінних середовища середовища агента ssh.

Спробуйте це виправити :

  1. Створіть цей скрипт і помістіть його в $ HOME / .ssh / saveagent

    #!/bin/sh
    SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
    
    for var in ${SSHVARS} ; do
      echo "export $var=\"$(eval echo '$'$var)\""
    done 1>$HOME/.ssh/latestagent
  2. Додайте його до сценарію запуску оболонки. Наприклад, якщо ви використовуєте bash:

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. Після приєднання tmux запустіть . $HOME/.ssh/latestagent

Див. Також Як я можу запустити сценарій відразу після підключення через SSH? і Приєднати до tmux сесії та запустити команду


1
Можливо, надішліть файл .profile, якщо ви намагаєтесь бути сумісним з іншими оболонками sh.
Дерексон

2
Чудова відповідь! Кілька питань , я зіткнувся: а - деякі з змінних оточення містять прогалини, тому рядок перед останнім в saveagentсценарії повинні бути: echo "export $var=\"$(eval echo '$'$var)\"". b - latestagentсценарій слід викликати sourceзамість sh, тому встановлення змінних вплине на оболонку виклику. в - latestagentавтоматично викликати скрипт після приєднання tmux можна за допомогою описаного тут методу: unix.stackexchange.com/questions/86925/…
Joe

Дякую @Joe, я змінив свою відповідь, щоб включити ваші вдосконалення.
GnP

0

Якщо ви не хочете створити скрипт, що містить усі необхідні вам змінні у кожній оболонці, яку ви надалі додаєте до будь-якої нової оболонки, породженої тими ж tmuxсеансами на сервері, ви, ймовірно, захочете сказати, tmuxщоб перемістити змінні в сеанс або глобальне середовище за допомогою set-environmentкоманди. Наприклад, як це (для bash):

for var in DISPLAY SSH_AUTH_SOCK ...; do
    tmux setenv "$var" "${!var}"
done

не забудьте додати -gпрапор, якщо ви хочете його і в інших сесіях, і використовувати, -t <session>якщо ви його використовуєте за межами tmux.


0

Прочитавши інші відповіді тут, я вирішив просто скопіювати свою публічну / приватну ключ до віддаленого сервера, так що мені більше не потрібно було турбуватися про переадресацію агента.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.