Shell de login dinâmico .bash_profile

3

Estou tentando encontrar uma maneira de definir dinamicamente as configurações do ambiente bash dependendo do ambiente em que estou fazendo login .

Por exemplo:

  • Abrindo uma sessão do Terminal a partir da GUI do xfce, ele carregaria um "padrão" (falta de uma palavra melhor) .bash_profile com minhas configurações básicas de ambiente

  • A conexão via SSH de outra máquina FreeBSD (ou Linux) também usaria esse "padrão" .bash_profile

  • A conexão via SSH do meu Mac adicionaria configurações adicionais (por exemplo, integração de shell iTerm2, por exemplo)

Eu pensei em testar a variável de ambiente SSH_CLIENT , mas isso mudaria dependendo do endereço DHCP em que minha máquina estava ssh'ing do dia.

Existe uma maneira de determinar qual é a plataforma da máquina remota e processar .bash_profile de acordo?

Se eu não puder "contê-lo" dentro de .bash_profile , há algo que eu possa "enviar" que me permita fazer isso?

    
por Allan 10.01.2018 / 02:17

1 resposta

1

Is there a way to determine what the remote machine's platform is and then process .bash_profile accordingly?

Não simplesmente não. Você pode, se as condições da rede permitirem, usar o nmap para tentar identificar o sistema operacional do IP de origem em $ SSH_CLIENT, mas isso não é necessariamente confiável. / p>

Se seus sistemas de origem estivessem em segmentos de rede diferentes, você poderia usar isso como um indicador aproximado para distinguir os sistemas de origem, mas esse não é o caso para você aqui.

Como você só quer que a conexão do Mac faça algo diferente, uma opção seria envolver ou aliasar a conexão ssh do Mac ao destino, de modo que ele passe uma variável de ambiente personalizada para o bash verificar:

alias ssh2it='ssh -t targethost "_origin=mac bash -il"'

Em seguida, configure o ~ / .bashr do seu targethost ao longo destas linhas:

case $_origin in
(mac)
        echo mac-specific settings here
        ;;
(other-custom-system)
        echo other settings here
        ;;
(*)
        echo any default settings here
        ;;
esac

Você teria que estender essa ideia para o outro tipo de sistema que deseja se comportar de maneira diferente, e isso significa envolver cada login interativo para definir a variável.

Se você puder controlar ainda mais o sshd_config do sistema de destino, você pode editar o arquivo / etc / ssh / sshd_config para adicionar:

AcceptEnv _origin

(e depois reciclar o sshd).

Em seguida, no sistema de origem, edite ~ / .ssh / config para enviar essa variável:

Host targetsystem
  SendEnv _origin

e antes de se conectar ao destino, execute:

export _origin=mac

Depois de efetuar login no sistema de destino, $ _origin será definido para esse valor.

    
por 10.01.2018 / 19:01