Назад | Перейти на главную страницу

Управляйте множеством открытых сеансов ssh для серверов с идентификаторами для имени хоста

В последнее время я много работаю с несколькими открытыми ssh-соединениями с несколькими серверами VPS. Имена хостов серверов основаны на подходе идентификатора, и становится очень трудно узнать, на какой машине я работаю.

Мне было интересно, есть ли способ поместить имя, которое я определяю где-нибудь как заголовок терминала. Поэтому я бы, например, связал IP 123.123.123.123 с webserver-stg. При открытии соединения с IP-адресом webserver-stg будет автоматически отображаться как имя сеанса. Конечно, я не могу изменить код на серверах VPS, поэтому решение должно быть клиентским.

Изменить: я работаю с terminal.app на OSX 10.6

xterm имеет флаг -T, который позволяет вам установить заголовок окна. putty позволяет вам установить его в подменю Behavior опций Window.

Предполагая, что удаленные хосты - * nix, вы также можете установить в качестве приглашения входа в систему имя хоста.

В bash или ksh выполняя export PS1="[\u@\h]$ " приводит к чему-то вроде:

[mazianni @ europe] $

Прежде всего, вам следует попытаться автоматизировать процесс, чтобы не запускать много сеансов ssh вручную. To follow up on the xterm -T вариант, вы также можете установить заголовок xterm через escape-символы оболочки. Я думаю, что большинство терминальных программ поддерживают аналогичную функцию. Увидеть Xterm Title Howto для подробностей. Затем используйте оболочку для вашей команды ssh, примерно так:

#!/usr/bin/bash
if [ x$1 != x ]
then
  remote=$1
else
  read -p "host? " remote
fi
echo -ne "\033]0;$remote\007"
exec ssh $remote

Я подтвердил, что это работает в xterms и в mac terminal.app, как я уже сказал, он, вероятно, работает в большинстве терминальных программ, которые имитируют exterm.

Почему бы просто не настроить значимые записи CNAME, указывающие на имя хоста типа ID. Затем вы можете подключиться через CNAME. Если у вас нет доступа к DNS для этих хостов, вы также можете сделать это с помощью файла HOSTS, который будет работать на любом компьютере, на котором он установлен.

Putty отобразит все, что вы использовали для подключения, в строке заголовка. Не могу сказать про XTERM.

В качестве альтернативы, если вы используете PuTTY, вы можете просто настроить сеанс с именем, которое вы хотите, в строке заголовка (параметр Window> Behavior в меню), уродливым именем хоста / IP-адресом в поле назначения и вашим предпочтительным именем в качестве сеанса название. Затем вы можете щелкнуть запоминающееся имя сеанса, чтобы открыть соединение и присвоить нужный заголовок.

Вы также можете захотеть сделать что-нибудь с .bash_profile для пользователей, которые подключились, чтобы в приглашении на поле использовалось предпочтительное имя, но вы сказали, что не можете ничего изменить в поле (хотя, вероятно, вы можете изменить свой собственный профиль).

Другие ответы верны, но я считаю, что полезнее иметь хороший сценарий и ярлыки к нему.


Я лично использую Ion3 в Debian и привязал F4 к следующему скрипту. Ion3 запрашивает у меня имя хоста:

#!/bin/bash
HOST=$1
x-terminal-emulator -t $HOST -e ssh -l root $HOST

Если вам нужен ярлык панели, который запрашивает имя хоста, создайте ярлык панели, который ссылается на следующий сценарий:

#!/bin/bash
HOST=$(zenity --entry --text="Connect to SSH Host")
x-terminal-emulator -t $HOST -e ssh -l root $HOST

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

#!/bin/bash
HOST=$0
x-terminal-emulator -t $HOST -e ssh -l root $HOST

Затем создайте ссылки, например: ln -s ssh-script.sh yourhost.example.com

Затем для каждой такой ссылки можно создать отдельный ярлык на рабочем столе / панели.

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'

Изменит заголовок окна вашего терминала Mac OS X на заданную строку. Затем вы можете легко выбрать, какое окно терминала вы хотите, в меню «Окно» в Терминале.

Если $ HOSTNAME не определен так, как хотелось бы, вы можете вставить любую произвольную строку с помощью команды подоболочки, например:

PROMPT_COMMAND='echo -ne "\033]0;$(cat /etc/my.host.name)\007"'