Я размещаю несколько доменов на одном сервере.
Я хотел бы иметь возможность изменить отображаемое имя хоста в моем приглашении 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. Надеюсь, это кому-то поможет :-)