4

Иногда я обнаруживаю, что открыто несколько терминалов, некоторые из которых подключены к другим (производственным) машинам. Если я выполню команду типа "удалить все таблицы в базе данных" на одном из этих ssh-ed-терминалов, я потенциально смогу уничтожить тонны данных клиента. Но при разработке, конечно, мне нужно время от времени запускать эти команды.

Итак, мне было интересно: есть ли способ получить мой терминал (в идеале встроенный GNOME, но я бы хотел переключиться на другую терминальную программу, если необходимо), чтобы изменить его внешний вид, когда я ssh на удаленной машине? В идеале у меня должен быть нормальный черный фон, но при подключении к удаленному компьютеру ssh фон меняется на красный. Может быть, границы окна станут красными и начнут мигать или что-то тоже.

Подробности изменения внешнего вида не важны: важно сразу понять, что мне нужно быть более осторожным при работе с терминалом, который где-то находится в ssh-ed. Это возможно?

PS Я нашел Contextual SSH, который именно то, что я хочу ... за исключением того, что это только для Mac :-(

3 ответа3

6

Я бы посоветовал установить в вашем $ PS1 соответствующую информацию, например, имя хоста и т.д. Вы можете проверить подробности на справочной странице вашей оболочки.

Пример того, что вы можете сделать со своей PS1 в bash

У меня сам есть тест в моей ~/.subbash/подсказке, который устанавливает цвет подсказки в зависимости от сервера.*

* см. функцию __prompt_command()

Способы вы могли бы изменить свой PS1

Существует множество способов настроить PS1. Похоже, вы хотите что-то более заметное, поэтому мои примеры будут немного сложнее, чем просто добавление \H к PS1. Чтобы использовать любое из следующего, вы можете добавить их в ваш ~/.bashrc (на удаленных серверах, если не на обоих. Я синхронизирую один и тот же конф между всеми моими компьютерами)

Примечание. Чтобы сделать их более читабельными, в следующем предполагается, что эти переменные объявлены.
Var легко можно заменить содержимым.
Кроме того, эти примеры смещены в bash, возможно, вам придется настроить другие оболочки.

RCol='\[\e[0m\]'    # Text Reset
Red='\[\e[0;31m\]'  # Red
Gre='\[\e[0;32m\]'  # Green
Yel='\[\e[0;33m\]'  # Yellow
Blu='\[\e[0;34m\]'  # Blue
Pur='\[\e[0;35m\]'  # Purple
Cya='\[\e[0;36m\]'  # Cyan
Whi='\[\e[0;37m\]'  # White

Root Check

Одна вещь, которая вам может понравиться, это протестировать $ USER, если он root, или, возможно, только для «производственной» учетной записи:

if [ $UID -eq "0" ];then
    PS1="${Red}\h \W ->${RCol} "        # Set prompt for root
else
    PS1="\h \W -> "
fi

Это сделало бы подсказку красным, если вы находитесь в корневом каталоге.

Проверка хоста

Вы также можете проверить информацию о текущей машине и установить цвета на основе этого:

PS1=
PSCol=
if [ $HOSTNAME == 'moving-computer-of-doom' ]; then
    PSCol="$Cya"                # For Main Computer
elif [ $HOSTTYPE == 'arm' ]; then
    PSCol="$Gre"                # For pi
elif [ $HOSTNAME == 'ma.sdf.org' ]; then
    PSCol="$Blu"                # For MetaArray
elif [[ $MACHTYPE =~ arm-apple-darwin ]]; then
    PSCol="$Gre"                # For iOS
elif [ $MACHTYPE == 'i486-pc-linux-gnu' ]; then
    PSCol="$Whi"                # For Netbook
elif [[ "$MACHTYPE" == "x86_64--netbsd" && "$OSTYPE" == "netbsd" ]]; then
    PSCol="$Yel"                # For Main Cluster
else
    PS1+="\h "              # Un-designated catch-all
fi

PS1+="${PSCol}\W ->${RCol} "

Это установило бы Cyan, если на моем ноутбуке, зеленый для моего пи или iOS и т.д. И т.д.
Если его нет в списке, он добавит имя хоста в приглашение.
Так что, если на ваших производственных серверах есть что-то, что было бы легко протестировать (например, похожее имя хоста, вы могли бы это использовать)

PROMPT_COMMAND

По большей части вышеупомянутое работало бы отлично без этого.
Если вы начнете добавлять вещи, которые вы хотели бы переоценивать чаще, чем логин (возможно, git status dir), вы можете использовать функцию PROMPT_COMMAND, чтобы PS1 оценивался после каждой команды.

Выше работают нормально без этого.

Примечание. Извините, если они кажутся запутанными, они взяты из настроек, которые я использую, и изменены для работы без остальных моих настроек.

3

Это отличная статья, которую я использовал, чтобы настроить приглашение bash:

http://www.ibm.com/developerworks/linux/library/l-tip-prompt/

Позволяет легко увидеть, когда я вошел в систему на моем сервере, так как я установил часть имени узла в моем приглашении красным цветом.

Значение, которое я использую в качестве PS1 в bash_profile:

PS1 = "[\ е [32; 1m]\ и [\ е [0м] [\ е [34; 1m] @ [\ е [0м] [\ е [31; 1m]\ ч [\ е [0м]:[\ e [34; 1m]\ w $ [\ e [0m] "

Это дает мне имя пользователя зеленым, за которым следует синий знак «@», затем имя хоста - красным, затем «~ $» - синим. Вы, вероятно, можете увидеть, как легко настроить, чтобы помочь вам легко увидеть, когда вы вошли на разные серверы

Убедитесь, что вы прочитали статью правильно, так как она объясняет, как правильно избежать каждой последовательности. Невозможность избежать последовательности может привести к непредсказуемому поведению при вводе более длинных команд.

1

Видимо, все предыдущие ответы работают только с Bash. Я использую Busybox на некоторых устройствах и поэтому нуждалась в альтернативе.

В соответствии с этим вы можете добавить общую строку в ваш скрипт входа в систему, которая должна работать (и сделала это для меня на нескольких разных хостах):

echo -n "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .