8

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

Если я возобновляю сеанс tmux после закрытия терминала, сна моего ноутбука, что бы то ни было, переадресация моих ключей на моих сессиях бастиона все еще работает, как и переадресация на любых новых сессиях. Однако существующие не работают.

В моем bashrc есть небольшая вещь, которая поддерживает переадресацию клавиш, когда я возобновляю tmux, но у меня возникают трудности с выяснением, как заставить его работать на сеансах, открытых в tmux.

Например, у меня есть bastion01, dbhost01, dbhost02, webhost01 и webhost02.

Если я открываю соединение с bastion01, запускаю там tmux, а затем соединяюсь с dbhost01 и переадресация webhost01 работает. Если я закрываю это соединение, повторно подключаюсь и присоединяю свой существующий сеанс tmux, а затем добавляю соединения в dbhost02 и webhost02, переадресация ключей работает в полях 02, но не в 01.

Пожалуйста помоги!

1 ответ1

11

Каждый раз, когда вы запускаете ssh в bastion01 , открывается новый сокет для обработки переадресации ключей. Вы можете увидеть имя файла в переменной окружения SSH_AUTH_SOCK . Когда вы запускаете tmux , значение этой переменной среды включается в глобальную среду tmux , которая наследуется всеми оболочками, запущенными в этом сеансе.

Теперь, когда вы снова подключитесь к bastion01 , для обработки переадресации ключей будет выделен другой сокет (так как это новый ssh-сеанс). Вы можете убедиться в этом, проверив значение SSH_AUTH_SOCK перед повторным подключением к сеансу tmux и после него. Чтобы переадресация ключей работала внутри tmux , вам нужно обновить значение SSH_AUTH_SOCK внутри tmux на имя сокета, используемого текущим сеансом ssh.

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

#!/bin/bash

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.auth_ssh

Выполните этот сценарий, как только вы запустите ssh в bastion01 , но перед повторным подключением к сеансу tmux. Затем, прежде чем пытаться выполнить ssh изнутри tmux , выполните следующее:

source ~/.auth_ssh

Каждое окно tmux имеет свою собственную среду, поэтому вам нужно будет запускать ее в каждом окне, где вы пытаетесь запустить ssh. Для простоты вы можете использовать псевдоним ssh, чтобы сделать это за вас:

alias ssh="source ~/.auth_ssh; ssh"

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

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