Показ стека соединений ssh ​​в терминале

271
Alex

У меня была эта идея долгое время, и я попытался реализовать несколько способов, но безуспешно. Пытался многократно гуглить и всегда находил не совсем то, что нужно.
Как сделать:

$ ssh hostA  |--------------------------------| | | | | | | | | | | | | | | | root@hostA $ ssh hostB | |--------------------------------|  |--------------------------------| | | | | | | | | | | | | | root@hostB $ | | root@hostA $ | |--------------------------------| 

Самое близкое решение, которое я придумал, это строка состояния экрана GNU, отображающая ssh from hostA to hostB(хитрость в том, чтобы использовать $SSH_...переменные). Было бы неплохо иметь визуальный стек всех соединений (а не только 2).

0
Это не практично. Представьте, что вы запускаете в обоих сеансах `top`, как это должно отображаться? Лучшее решение - это [tmux] (http://tmux.sourceforge.net/) или, если у вас установлена ​​система X-Window и вы не возражаете против некоторых зависимостей от Gnome, [Terminator] (http: // www. tenshu.net/p/terminator.html). Bobby 11 лет назад 0
Таким образом, вы просто хотите, чтобы подсказка отражала хост, с которого вы sshed, а также тот, к которому вы подключены? Не могли бы вы просто обновить приглашение в профиле bash, используя SSH_ vars? Paul 11 лет назад 0
@ Бобби, на самом деле, как это отображается, не важно - главное знать путь соединений. например, ssh из hostA в hostB, а затем в hostC может отображаться в виде стека или в виде одной строки: "hostA -> hostB -> root @ hostC $" Alex 11 лет назад 0
@Paul, как и в моем тексте вопроса, мне удалось заставить его работать с $ SSH_ vars, но сейчас это работает максимум + предыдущие хосты. Что если я хочу увидеть цепочку / туннель из 4 соединений? Alex 11 лет назад 0
Ой, подождите, вы просто хотели показать * путь *? Как `root @ hostB_via_hostA`,` root @ hostC_via_hostB_via_hostA`? В таком случае поцарапайте мой комментарий. Bobby 11 лет назад 0

2 ответа на вопрос

1
Nada

Вы пробовали / смотрели на экран ?

Это не совсем то, что вы хотите, но вы можете создать экранное меню, когда захотите получить список, который вы хотите.

Привет Нада, для меня запуск `screen` и` screen -la`, кажется, дает одинаковый результат Alex 11 лет назад 0
1
Paul

В ~/.ssh/environmentвы можете установить переменные окружения, которые вы хотите, чтобы пройти через удаленные хосты. Это требует PermitUserEnvironmentнастройки, включенной в sshd_config.

Итак, что вы можете сделать - это .bashrcкакой-либо сценарий, который вы предпочитаете, установить переменную окружения для прохождения:

echo "HOSTPATH=$HOSTPATH-$USER@$HOSTNAME" >> ~/.ssh/environment 

Для вашего первого прыжка, HOSTPATHбудет пусто, поэтому ~/.ssh/environmentбудет содержать HOSTNAME=-user@host1.

Когда вы войдете на второй хост, HOSTNAMEenv var будет показан, откуда вы пришли. При повторном запуске bashrc HOSTPATHпеременная будет записана в .ssh / enviroment с текущим хостом, добавленным к первому, и готовым к следующему прыжку:

HOSTNAME=-user@host1-user@host2 

Каждая надежда приведет HOSTPATHк добавлению к текущему хосту и готовности к передаче через среду ssh к следующему прыжку.

Вы можете адаптировать это для вашей собственной астетики. Если вы выйдете из хоста и перейдете к другому, он должен автоматически удалить хост, с которого вы пришли по пути, так как он будет использовать текущие .ssh/environmentнастройки. Это может даже иметь дело с петлями, я оставлю это как упражнение для читателя :)

Похожие вопросы