тайм-аут ключа ssh-агента з екраном або tmux на хості бастіона


8

Зазвичай у мене запущено ssh-агент, я сшу на свій хост бастіона, потім відкриваю сесію tmux і через це підключаюсь до інших вікон. Переадресація ключів працює для будь-яких сеансів, які я відкриваю з цього моменту вперед.

Якщо я відновлю свій tmux сеанс після закриття терміналу, сплю ноутбук, що завгодно, моє переадресація ключів на моїх сесіях в бастіоні все ще працює, як і переадресація на будь-які нові сесії. Однак існуючі не працюють.

У моєму файні bashrc є маленька річ, яка продовжує працювати переадресацію ключів, коли я відновлю tmux, але у мене виникають проблеми з розгадами, як змусити його тримати роботу для сесій, відкритих у tmux.

Наприклад, у мене є bastion01, dbhost01, dbhost02, webhost01 та webhost02.

Якщо я відкрию з'єднання з bastion01, запустіть tmux там, а потім підключуйтесь до переадресації dbhost01 та webhost01. Якщо я закрию це з'єднання, підключуюсь знову та приєдную існуючий сеанс tmux, тоді додаю з'єднання до dbhost02 та webhost02, переадресація ключів працює на полях 02, але не на 01.

Будь ласка, допоможіть!

Відповіді:


11

Кожен раз, коли ви впадаєте в систему 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

Виконайте цей скрипт, як тільки bastion01впадаєте в ssh , але перед тим, як повторно приєднатись до свого сеансу tmux. Потім перед тим, як спробувати tmuxзапустити кудись ізсередини , виконайте наступне:

source ~/.auth_ssh

У кожному tmuxвікні є власне середовище, тому вам потрібно запустити це у кожному вікні, де ви намагаєтеся запустити ssh. Для простоти ви можете псевдонім ssh зробити це за вас:

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

Примітка. Це суттєве спрощення сценарію, який ми використовуємо на роботі для оновлення інформації про авторизацію SSH. Якщо це не спрацьовує правильно, я сподіваюся, що це принаймні надасть вам достатньо інформації, щоб Google покращив рішення (або хтось інший розмістив тут краще рішення).

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