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


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

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

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


9
2017-09-22 13:18


происхождения


что вам нужно знать, чтобы идентифицировать ваш сервер? Я просто набираю имя «hostname», чтобы увидеть имя сервера. Этого достаточно для меня, потому что мы использовали хорошее соглашение об именах - Private
в настоящее время у меня есть user@hostname на первом хосте i connect. Я хотел бы видеть ip-адрес. также, если я прыгаю с server1 в server2, вкладка не изменяет имена. - RASG
да, это ваше имя, но я имею в виду имя сервера. должно быть имя хоста для этой машины. разве вам недостаточно информации? - Private
Как установить цвет фона ваших терминалов? В зависимости от того, как вы подключаетесь и какой терминал вы используете, вы сможете автоматизировать его. Например, я могу установить темный красный фон для производственных серверов, поэтому я знаю, что я должен быть особенно осторожным, особенно при одновременном подключении к промежуточным серверам, которые выглядят одинаково. - Panda Pajama
Если вы постоянно переключаетесь между 30 серверами, вам нужно посмотреть на скрипты и инструменты, такие как марионетка для управления. Кроме того, если IP более узнаваем, чем имя хоста, это не похоже на хорошие имена хостов! - JamesRyan


ответы:


Обычно я использую имя хоста, установленное через $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 '\033]0;'"$host"' - '"$IP"'\007'
    screen ssh "$@"
}

Объяснение:

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

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

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


11
2017-09-22 15:46





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

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

5
2017-09-22 13:37



Благодарю. и как бы вы автоматически добавили это как заголовок закладки терминала? - RASG


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

enter image description here


2
2017-09-22 14:35





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

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

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

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

С: PS1="${debian_chroot:+($debian_chroot)}\u@\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 "\033]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 username@0.0.0.0

откроет новую вкладку, переименует ее в 0.0.0.0 (т. е. все, следующее за знаком «@»), затем выполнить username@0.0.0.0,

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


2
2017-09-22 16:50