17

У меня есть личный ключ, настроенный для моей учетной записи на github, парольная фраза к которой, я считаю, хранится в цепочке для ключей OS X. Мне, конечно, не нужно вводить его, когда я открываю окно терминала и ввожу ssh git@github.com .

Однако, когда я запускаю bash в сеансе ssh или локально в сеансе tmux, мне приходится вводить парольную фразу каждый раз, когда я пытаюсь выполнить ssh в github.

Этот вопрос предполагает, что похожая проблема существует с экраном, но я не совсем понимаю проблему достаточно, чтобы исправить ее в tmux. Также есть эта страница, которая содержит довольно сложное решение, но для zsh.

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

В ответ на ответ @ Mikel из локального терминала я получаю следующий вывод:

[~]
$ echo $SSH_AUTH_SOCK
/tmp/launch-S4HBD6/Listeners
[~] 
$ ssh-add -l
2048 [my key fingerprint] /Users/richie/.ssh/id_rsa (RSA)
[~]
$ typeset -p SSH_AUTH_SOCK
declare -x SSH_AUTH_SOCK="/tmp/launch-S4HBD6/Listeners"

Тогда как по ssh или по tmux я получаю:

[~]
$ echo $SSH_AUTH_SOCK

[~]
$ ssh-add -l
Could not open a connection to your authentication agent.
[~]
$ typeset -p SSH_AUTH_SOCK
bash: typeset: SSH_AUTH_SOCK: not found

echo $SSH_AGENT_PID ничего не возвращает, независимо от того, из какой оболочки я его запускаю.

6 ответов6

8

Элегантное решение, взятое из dagit.o:

Создать ~/.ssh/rc

#!/bin/bash
if [ -S "$SSH_AUTH_SOCK" ]; then
    ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi

Добавить в ~/.tmux.conf

set -g update-environment "DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
set-environment -g 'SSH_AUTH_SOCK' ~/.ssh/ssh_auth_sock
6

В файле конфигурации .tmux.conf добавьте эту строку:

установить -g update-environment "SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION"

Это приводит к тому, что эти переменные среды копируются из вашей основной оболочки в любые оболочки, открытые в tmux, что позволяет ssh-agent правильно работать внутри этих оболочек tmux.

4

Мой коллега создал несколько функций bash, чтобы помочь найти живого агента: https://github.com/wwalker/ssh-find-agent

Он использует его в основном для соединения между системами (ноутбук с настольным компьютером и т.д.), Но я использую его чаще всего для локальных сеансов tmux, когда вы выходите из / в своем оконном менеджере (OS X для меня).

использование

  1. Загрузите ssh-find-agent.bash (git clone git://github.com/wwalker/ssh-find-agent.git works).

  2. Добавьте следующее в ~/.bashrc:

    . /path/to/ssh-find-agent.bash
    
  3. Затем вы можете ввести следующее, чтобы установить SSH_AUTH_SOCK в вашей текущей оболочке:

    set_ssh_agent_socket
    
3

Со мной случилось, что панели, созданные при подключении через ssh из OS X, через некоторое время начали спрашивать мою фразу-пароль. Я нашел способ исправить эту кражу этой строки из http://santini.di.unimi.it/extras/ph/my-tmux-setup.html.

eval $(tmux show-environment -t [YOUR-SESSION] | grep '^SSH_AUTH_SOCK')

Просто запустите его из жалующейся панели.

2

Не уверен, что вы используете bash или другую оболочку, но настройка tmux этого парня выглядит так, как будто она работает для bash. Лично я использую zsh с oh-my-zsh и обнаружил, что ssh-agent начал работать в tmux после добавления

zstyle :omz:plugins:ssh-agent agent-forwarding on

в мой файл .zshrc и перезагрузил конфигурацию в моих текущих сеансах zsh. Я также нашел Zsh-ориентированное решение этого парня, но оно оказалось ненужным для меня.

1

Что значит:

echo $SSH_AUTH_SOCK
echo $SSH_AGENT_PID
ssh-add -l

Распечатать?

Запустите его в своем обычном терминале, а затем запустите в сеансе tmux . Они должны напечатать то же самое.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .