Назад | Перейти на главную страницу

Изменение отображаемого имени хоста в приглашении bash на основе учетных данных для входа

Я размещаю несколько доменов на одном сервере.

Я хотел бы иметь возможность изменить отображаемое имя хоста в моем приглашении bash, чтобы указать, какой из них я выбрал при ssh'ing на сервер.

Моя подсказка выглядит следующим образом:

\u@\h

Это отображается как:

user@hostname

Как мне изменить \h чтобы показать, в какой домен я вошел (blah.net, hmm.com и т. д.)?

У всех ваших доменов разные IP-адреса?

Если это так, вы можете использовать переменную $ SSH_CONNECTION после входа в систему.

Если нет, то отличить невозможно, сервер видит только IP-адрес, такого понятия как ssh на основе имени не существует.

Оказывается, что ssh находит линии в ssh_config(5) путем сопоставления строк, так что все в порядке, если все IP-адреса совпадают.

То, что вы хотите,

  • Различные строки в .ssh/config для каждой системы используйте HostName давать ssh реальное доменное имя хоста
  • Имейте три разные переменные среды с разными подсказками в них в вашей локальной среде.
  • Каждая строчка в .ssh/config отправить другую переменную, используя SendEnv, видеть man ssh_config.
  • Сделайте запрос из всех трех (два всегда будут нулевыми)
  • Ставить AcceptEnv * в /etc/ssh/sshd_config и sudo kill -1 $(cat /var/run/sshd.pid)
    (AcceptEnv E1 E2 E3 тоже должно работать.)

Пример.

Клиент .ssh/config

Host barb
        HostName deb
        SendEnv BARB

Host jane
        HostName deb
        SendEnv JANE

Host deb barb jane
        Protocol 2
        ForwardAgent yes
        Compression no

Сервер .bashrc

PS1='$BARB$JANE.otherstuff...'

Сервер /etc/ssh/sshd_config

...
AcceptEnv *

Возможно, вы сможете использовать SendEnv директива (требуется протокол 2, а sshd на удаленном компьютере должен быть настроен для AcceptEnv, чтобы включить имя переменной, которую вы хотите использовать):

На локальной машине:

export dest=example.com; ssh -o "SendEnv dest" username@$dest

На удаленном компьютере в ~ / .bashrc:

PS1="...${dest}..."

Где эллипсы представляют остальную часть вашего приглашения.

Если вы редактируете /etc/ssh/sshd_config чтобы добавить переменную, вам может потребоваться отправить SIGHUP на sshd.

Или, если вы уже используете bash в этих доменах, отредактируйте файл .bashrc, чтобы добавить строку:

PS1 = '\ u @ \ h: \ w \ $'

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

Что тебе нужно сделать, это указать подсказка (PS1) с правильным именем хоста во время подключения к серверу. Предполагая, что вы используете клиент ssh на машине Linux, вы можете сделать это, выполнив команду:

ssh -t username@hostname-001 "export PS1='\u@hostname-001'; bash --login"

Я нашел этот метод очень полезным при управлении подключениями ко многим серверам без правильного набора имен хостов (например, в именах хостов по умолчанию для EC2 amazon). Я написал небольшую вспомогательную функцию bash, использовал псевдонимы bash и поместил ее в файл .bashrc.

function __ssh_helper {
    local user=$1
    local host=$2
    local txtgrn='\e[0;32m'
    local txtblu='\e[0;34m'
    local txtcyn='\e[0;36m'
    local txtrst='\e[0m'
    ssh -t ${user}@${host} "export PS1='[${txtcyn}\u${txtrst}@${txtgrn}${host}${txtrst} \W]\$ '; bash --login"
}

alias hostname-001.prod='__ssh_helper username hostname-001.prod'
alias hostname-002.prod='__ssh_helper username hostname-002.prod'

Я использовал файл / etc / hosts, чтобы указать hostname-00 (1 | 2) .prod на IP-адреса. Чтобы добавить новое соединение ssh: 1. добавьте имя хоста в файл / etc / hosts; 2. добавить псевдоним к .bashrc; 3. Соберите изменения, используя файл .bashrc. Надеюсь, это кому-то поможет :-)