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

9

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

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

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

RASG
источник
1
что нужно знать, чтобы идентифицировать свой сервер? Я просто набираю "имя хоста", чтобы увидеть имя сервера. Этого достаточно для меня, чтобы знать, потому что мы использовали хорошее соглашение об именах
Private
В настоящее время у меня user@hostnameна первом хосте я подключаюсь. Я хотел бы видеть IP-адрес. также, если я прыгаю с server1на server2, вкладка не меняет имена.
RASG
да, это ваше имя, но я имею в виду имя сервера. для этой машины должно быть имя хоста. Разве это не достаточно информации для вас?
Частное
1
Как насчет настройки цвета фона ваших терминалов? В зависимости от того, как вы подключаетесь и каким терминалом пользуетесь, вы можете автоматизировать его. Например, я могу установить темно-красный фон для производственных серверов, поэтому я знаю, что должен быть особенно осторожен, особенно при одновременном подключении к промежуточным серверам, которые выглядят и чувствуют себя одинаково.
Панда Пижама
1
Если вы постоянно переключаетесь между 30 серверами, вам нужно взглянуть на скрипты и такие инструменты, как puppet для управления. Кроме того, если IP-адрес более узнаваем, чем имя хоста, это не похоже на хорошие имена хостов!
Джеймс Райан

Ответы:

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 '\033]0;'"$host"' - '"$IP"'\007'
    screen ssh "$@"
}

Объяснение:

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

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

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

Мур
источник
5

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

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

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

введите описание изображения здесь

Rmano
источник
2

Это решение немного хакерское, но я думаю, что оно сделает то, что вы ищете. Вам нужно 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сеанс. Например:

tab-ssh username@0.0.0.0

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

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

TheSchwa
источник