Определите сервер, на котором я работаю

9

Как определить, на каком сервере вы работаете при использовании ssh с терминала?

Я должен ежедневно отправлять ssh на 30 серверов и переключаться между ними постоянно.
В настоящее время я редактирую имя вкладки и записываю IP-адрес, чтобы переходить от одного к другому.

Есть ли автоматизированный способ сделать это (присвоение IP-адреса сервера в качестве имени вкладки)? Любые другие альтернативы, которые не будут включать редактирование файла на каждом сервере?

    
задан RASG 22.09.2014 в 13:18
источник

4 ответа

11

Обычно я использую имя хоста, заданное через $PS1 . Однако, если вы столкнулись с проблемой, вы можете начать использовать GNU screen , а затем вы можете определить такую ​​функцию:

function ssh-title () {
    host="${@: -1}"  # You could customize it to make it identify the hostname better
    IP=$(host "$host" | awk '/has address/ { print $4 }')
    echo -ne '3]0;'"$host"' - '"$IP"'%pr_e%7'
    screen ssh "[email protected]"
}

Пояснение:

  1. Даже если вы установили заголовок из своей локальной оболочки, он может быть перезаписан удаленными настройками оболочки. screen напрямую не разрешает удаленной оболочке делать это, и вы должны настроить его, чтобы позволить ему это сделать, чтобы вам было легче установить заголовок локально и придерживаться его.
  2. Посмотрите IP-адрес от имени хоста , рассматривая последний параметр в качестве имени хоста и установить его как заголовок. Мне пришлось сделать немного пробный и ошибки , прежде чем я получу правильную строку echo . Возможно, вам придется это сделать.
  3. Наконец, используйте screen , чтобы начать сеанс с помощью команды ssh . Сеанс завершается, когда команда завершает работу.

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

Теперь используйте ssh-title some.host для подключения. Я думаю, что это единственный способ сделать это без редактирования серверной части.

    
ответ дан muru 22.09.2014 в 15:46
5

Несколько способов идентифицировать сервер:

  • Отпечаток SSH - безопасен, но изменяется при каждом повторном развертывании.
  • Приглашение оболочки ( PS1 ) и название терминала - небезопасно (любой может дублировать он), но простой и практичный.
  • ip address - безопасно с отпечатком SSH и более легко читаемым.
  • hostname - небезопасный, но очень читаемый.
ответ дан l0b0 22.09.2014 в 13:37
2

Другой вариант - использовать liquidprompt --- работает как bash , так и zsh , и его можно легко настроить чтобы иметь название терминала и даже цвет в разных цветах имя хоста в приглашении:

    
ответ дан Rmano 22.09.2014 в 14:35
2

Это решение немного хакерское, но я думаю, что он будет делать то, что вы ищете. Для этого вам понадобятся xdotool и wmctrl .

Сначала вам нужно отредактировать файл ~/.bashrc , потому что по умолчанию терминал сбрасывает свой заголовок после каждой строки, рендеринг заголовка командной строки бесполезен.

Сразу после: xterm*|rxvt*)

Заменить: PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\[email protected]\h: \w\a\]$PS1"

С: PS1="${debian_chroot:+($debian_chroot)}\[email protected]\h \w\a$ "

Затем мы собираемся создать собственный скрипт ssh , который будет вам нужен, но для этого ответа я назову свой tab-ssh . Откройте текстовый редактор и сохраните следующее: tab-ssh :

#!/usr/bin/env bash

WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID

sleep 1
title=$(echo "$*" | sed s/.*@//g)
xdotool type --delay 1 --clearmodifiers 'echo -en "3]0;"'"${title}"'"\a"'
xdotool key Return

sleep 1
xdotool type --delay 1 --clearmodifiers "ssh $*"
xdotool key Return

Затем сделайте его выполнимым:

chmod +x tab-ssh

Теперь, если вы используете bash и gnome-terminal , запуск сценария должен открыть новую вкладку, переименовать ее и запустить сеанс ssh . Для exmaple:

tab-ssh [email protected]

откроет новую вкладку, переименуйте ее в 0.0.0.0 (т. е. все, следующее за знаком «@»), затем выполните [email protected] .

Создано с помощью следующего:

ответ дан TheSchwa 22.09.2014 в 16:50