Как определить, какой сервер Вы идете при использовании ssh от терминала?
Я ежедневно имею к ssh в 30 серверов и переключатель между ними постоянно.
В настоящее время я редактирую имя вкладки и пишу IP iddress для спрыгивания с того другому.
Существует ли автоматизированный способ сделать это (присвоение IP-адреса сервера как имя вкладки)? Какие-либо другие альтернативы, которые не включат редактирование файла на каждом сервере?
Я обычно использую имя узла, устанавливаю через $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 "$@"
}
Объяснение:
screen
непосредственно не позволяет удаленной оболочке сделать это, и необходимо настроить ее для разрешения ее, делают так, облегчая для Вас устанавливать заголовок локально и придерживаться его. echo
строка. Вам, возможно, придется сделать это также. screen
для запуска сессии с эти ssh
команда. Сессия заканчивается, когда команда выходит. можно настроить это различными способами. Например, можно сохранить имена узлов и дюйм/с в файле и читать из него (своего рода как ssh_config
) (и возможно сохранить другие вещи для заголовка, как имена пользователей).
Теперь использование ssh-title some.host
для соединения. Я думаю, что это - единственный способ, которым можно сделать это, ничего не редактируя сторона сервера.
Несколько способов определить сервер:
PS1
) и терминальный заголовок - небезопасный (кто-либо может копировать его), но простой и практичный. ip address
- защищают с цифровым отпечатком SSH, и более легко читаемый. hostname
- небезопасный, но очень читаемый. Другая опция состоит в том, чтобы использовать работы liquidprompt---и для bash
и для zsh
и может быть легко настроена, чтобы установить терминальный заголовок и даже раскрасить различные цвета имя узла в подсказке:
Этим решением является немного hackish, но я думаю, что это сделает то, что Вы ищете. Вам будет нужно 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
.
Созданное использование следующего: