Визначте сервер, на якому я працюю


9

Як визначити, на якому сервері ви використовуєте ssh з терміналу?

Мені доводиться щодня переходити на 30 серверів і постійно перемикатися між ними.
В даний час я редагую ім’я вкладки і пишу IP-адресу, щоб переходити з однієї на іншу.

Чи існує автоматизований спосіб зробити це (призначити IP-адресу сервера як ім'я вкладки)? Будь-які інші альтернативи, які не передбачають редагування файлу на кожному сервері?


1
що вам потрібно знати, щоб ідентифікувати ваш сервер? Я просто набираю "ім'я хоста", щоб побачити ім'я серверів. Цього мені достатньо знати, тому що ми використовували добру конвенцію про іменування
рядовий

В даний час у мене є user@hostnameперший хост, який я підключаю. Я хотів би побачити IP-адресу. також, якщо я переходжу з server1на server2, вкладка не змінює імена.
RASG

так, це ваше ім'я, але я маю на увазі ім'я сервера. для цієї машини має бути ім'я хоста. це не достатньо інформації для вас?
Приват

1
Як щодо налаштування кольору фону ваших терміналів? Залежно від способу підключення та терміналу, який ви використовуєте, ви зможете його автоматизувати. Наприклад, я можу встановити темно-червоний фон для виробничих серверів, тому я знаю, що мені потрібно бути особливо обережним, особливо при одночасному підключенні до інсценуючих серверів, які виглядають і відчувають точно так само.
Піжама Panda

1
Якщо ви постійно перемикаєтесь між 30 серверами, тоді вам потрібно переглянути сценарії та такі інструменти, як лялька для управління. Крім того, якщо IP є більш розпізнаваним, ніж ім'я хоста, вони не звучать як хороші імена хостів!
JamesRyan

Відповіді:


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 - невпевнено, але дуже читабельно.

Дякую. і як би ви автоматично додали це як назву вкладки вашого терміналу?
RASG

2

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

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


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.

Створено за допомогою наступного:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.