Alterando o nome do host exibido no prompt do bash com base nas credenciais de login

2

Eu hospedo vários domínios em um servidor.

Eu gostaria de poder alterar o nome do host exibido no meu prompt do bash para indicar qual deles eu escolhi quando fiz o ssh no servidor.

Meu prompt é o seguinte:

\u@\h

Isso é exibido como:

user@hostname

Como eu mudaria o \h para mostrar em qual domínio eu estava logado (blah.net, hmm.com, etc)?

    
por warren 07.11.2009 / 16:27

6 respostas

4

Acontece que ssh encontra linhas em ssh_config(5) por correspondência de string, então tudo bem se todos os IPs forem iguais.

O que você quer, então, é

  • Linhas diferentes em .ssh/config para cada sistema, use HostName para fornecer ssh o nome do domínio do host real
  • Tem três variáveis de ambiente diferentes com prompts diferentes em seu ambiente local
  • Solicite que cada linha em .ssh/config envie uma variável diferente usando SendEnv , consulte man ssh_config .
  • Faça o seu prompt de todos os três (dois serão sempre nulos)
  • Coloque AcceptEnv * em /etc/ssh/sshd_config e sudo kill -1 $(cat /var/run/sshd.pid)
    ( AcceptEnv E1 E2 E3 também deve funcionar.)

Exemplo.

Cliente .ssh/config

Host barb
        HostName deb
        SendEnv BARB

Host jane
        HostName deb
        SendEnv JANE

Host deb barb jane
        Protocol 2
        ForwardAgent yes
        Compression no

Servidor .bashrc

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

Servidor /etc/ssh/sshd_config

...
AcceptEnv *
    
por 07.11.2009 / 22:49
4

Seus domínios têm IPs diferentes?

Se assim for, você pode usar a variável $ SSH_CONNECTION quando estiver logado.

Se não, então é impossível diferenciar, tudo o que o servidor vê é o endereço IP, não existe o ssh baseado em nome.

    
por 07.11.2009 / 16:37
4

Uma maneira de fazer isso pode ser fazer entradas para cada um dos seus nomes de host em seu local ~ / .ssh / config, configurado para conectar-se a diferentes portas em seu servidor.

%pr_e%

Barra do host   HostName www.bar.com   Porto 2022

Em seguida, o seu ~ / .bashrc no servidor pode analisar a variável de ambiente SSH_CONNECTION e escolher a porta à qual você se conectou, e alterar o prompt de acordo.

%pr_e%

PS1="\ n \ u @ $ WEBHOST \ w \ n $? >"

Obviamente você precisaria de ruby em seu caminho para isso, mas você entende o que quero dizer.

    
por 07.11.2009 / 19:46
4

Você pode usar a diretiva SendEnv (o protocolo 2 é necessário e o sshd na máquina remota deve ser configurado para AcceptEnv para incluir o nome da variável que você deseja usar):

Na máquina local:

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

Na máquina remota, em ~ / .bashrc:

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

Onde as elipses representam o resto das coisas no seu prompt.

Se você editar /etc/ssh/sshd_config para adicionar uma variável, talvez seja necessário enviar SIGHUP para sshd .

    
por 07.11.2009 / 21:32
0

Ou, se você já usa o bash nesses domínios, edite o arquivo .bashrc para adicionar a linha:

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

Para que quando você fizer login e alternar para bash, o nome de usuário e o nome do host serão exibidos.

    
por 31.03.2011 / 11:29
0

O que você precisa fazer é especificar o prompt (PS1) com o nome do host correto durante a conexão com um servidor. Supondo que você use o cliente ssh na máquina Linux, você pode fazê-lo executando o comando:

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

Eu achei esta técnica muito útil enquanto gerenciava conexões para muitos servidores sem o próprio nome de host (como nos nomes de host padrão amazon do EC2). Eu escrevi uma pequena função bash, usei aliases bash e coloquei no arquivo .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'

Eu usei o arquivo / etc / hosts para apontar o nome do host-00 (1 | 2) .prod para endereços IP. Para adicionar uma nova conexão ssh simplesmente: 1. adicione o nome do host ao arquivo / etc / hosts; 2. adicione um alias a .bashrc; 3. Escolher as alterações, obtendo o arquivo .bashrc. Espero que ajude alguém: -)

    
por 30.11.2015 / 12:13