5

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

Недавно я начал использовать tmux для лучшего управления окнами терминала, но обнаружил странную проблему. Хотя исходное окно, которое я открываю в tmux, может использовать SSH, любые дополнительные открытые окна не могут. ssh-add показывает, что изнутри этого окна tmux невозможно открыть соединение с моим SSH-агентом. Есть идеи, как сделать так, чтобы tmux хорошо играл с переадресацией по SSH?

2 ответа2

7

Когда вы открываете второе соединение с вашей виртуальной машиной , она будет использовать другую переменную среды SSH_AUTH_SOCK , но tmux и процессы в ней будут знать только старое значение.

Когда вы присоединяетесь к существующему сеансу, tmux может указать ведущему процессу обновить некоторые переменные среды. SSH_AUTH_SOCK уже есть в списке, но вы можете добавить пользовательские с помощью ~/.tmux.conf:

set -ga update-environment " FOO BAR"

Однако это повлияет только на новые окна tmux, открытые префиксом c. Для tmux невозможно обновить среду уже запущенных процессов (оболочек и т.д.).


С OpenSSH вы можете повторно использовать одно и то же соединение SSH для нескольких сессий, сохраняя SSH_AUTH_SOCK .

  1. Запустите мастер-соединение:

    ssh -AfNMS ~/.ssh/myvmhostname.socket myvmhostname
    
  2. Откройте сессию по этому:

    ssh -S ~/.ssh/myvmhostname.socket myvmhostname
    

(Для автоматизации -M и -S обратитесь к ControlMaster/ControlPath на странице руководства ssh_config .)

3

Привет, я знаю, что это старый вопрос, но я обнаружил, что эта страница в основном говорит о добавлении этого в файл .bashrc на вашей виртуальной машине. По сути, он связывает ваш ssh-сокет с предсказуемой целью. TBH это может быть проблема безопасности, но я не думаю, что она должна быть серьезной, если вы являетесь администратором машины (однако я не эксперт по безопасности):

(Из пометки блога)

В вашем файле .bashrc или .zshrc добавьте следующее:

# Predictable SSH authentication socket location.
SOCK="/tmp/ssh-agent-$USER-screen"
if test $SSH_AUTH_SOCK && [ $SSH_AUTH_SOCK != $SOCK ]
then
    ln -sf $SSH_AUTH_SOCK $SOCK
    export SSH_AUTH_SOCK=$SOCK
fi

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