A maneira mais eficaz de alterar o prompt de comando do Linux para todos os usuários?

5

Eu tenho várias máquinas e os nomes de host são realmente longos .. ou seja, companyname-ux-staging-web1.companyname.com. Então, meu prompt parece algo como

[root@mycompany-ux-staging-web1 ~]#

Eu gostaria de encurtar isso para todos os usuários em todas as máquinas com o mínimo de trabalho. Pelo que li, tenho algumas opções, mas todas têm suas desvantagens.

Eu poderia alterar o nome do host, mas isso provavelmente afetaria os aplicativos. Não é uma ótima escolha.

Eu poderia alterar também $ PS1 no login para todos os usuários editando todos os .bashrc para usuários existentes e editando /etc/skel/.bashrc para possíveis novos usuários. Isso é muito trabalho em mais de 10 máquinas.

Qual é a minha melhor opção ou o que eu negligenciei?

    
por incredimike 04.01.2011 / 18:29

8 respostas

6

Você provavelmente deve exportar o PS1. Em vez de editar a correção de um usuário, você deve editar o sistema bashrc: um usuário deve ser capaz de sobrescrever um prompt com sua escolha.

Em segundo lugar, para distribuir o arquivo use scp ou clusterssh. Se você configurar uma chave rsa, nem precisará digitar sua senha mais de uma vez para o scp:

eval 'ssh-agent'
ssh-add
for h in 'cat ~/hostlist'; do
    scp ~/newbashrc ${h}:/etc/bashrc
done
eval 'ssh-agent -k'
    
por 04.01.2011 / 18:39
3

Não deve haver mais trabalho do que qualquer gerenciamento de configuração existente que você esteja usando para implantar novas configurações nesses dez servidores. Se este é um problema persistente para a sua organização, você definitivamente quer olhar para uma ferramenta de gerenciamento de configuração como o Puppet / Chef / Cfengine e uma ferramenta de implantação como o MCollective / RunDeck / Capistrano / Fabric.

    
por 04.01.2011 / 18:41
3

Edite / etc / profile

/ etc / profile é executado quando um usuário faz o login. ~ / .bashrc é executado para outros shells (por exemplo, abrindo um xterm)

exportar PS1="[\ e [0; 35m] [\ u \ t \ h \ W] \ $ [\ e [0m]"

Você provavelmente vai querer tirar o \ h

  • \ u: exibe o nome de usuário atual
  • \ h: exibe o nome do host
  • \ W: Imprimir o diretório de trabalho atual
  • \ H: exibir nome do host FQDN
  • \ @: exibe a hora atual no formato de 12 horas am / pm
  • \ t: a hora atual no formato de 24 horas HH: MM: SS
  • \ e: um caractere de escape ASCII (033)

link

    
por 04.01.2011 / 22:24
2

você pode criar um script executável no diretório /etc/profile.d/, por exemplo: /etc/profile.d/custom_prompt.sh, com este conteúdo:

#!/bin/sh

export PROMPT_COMMAND=’export PS1="[\e[0;35m][\u \t \h \W]\$ [\e[0m]"‘

Com esse método, você não precisa modificar nenhum arquivo para alterar o prompt bash de todos os usuários.

    
por 15.10.2015 / 05:15
1

Você pode editar o bashrc do sistema em / etc / bashrc, mas é facilmente sobrescrito por qualquer usuário com acesso ao shell. Você poderia facilmente escrever algo para empurrar uma nova .bashrc para uma lista de usuários usando scp.

    
por 04.01.2011 / 18:35
1

Como afirmado scp é provavelmente o mais fácil com um script simples. Outra opção é rysnc. Além disso, você pode apenas fazer o cron para fazer isso com sshkeys.

    
por 04.01.2011 / 19:10
0

Sua segunda opção parece viável se você puder enviar comandos para todos os servidores de uma só vez para atualizar os arquivos. Para isso você pode usar o pssh no linux ( link ) ou o PuTTY Command Sender ( link ) com o PuTTY no Windows.

Você pode criar um comando sed / awk que possa substituir a linha nos arquivos skel .bashrc e / etc / bashrc e users bashrc. Em seguida, envie isso como um comando para todos os sistemas.

O comando sed provavelmente será o que mais funciona. Infelizmente, não sou tão bom com sed e awk. Alguém pode oferecer mais informações nessa área. Espero que esta informação ajude!

    
por 04.01.2011 / 18:42
0

Eu tive que fazer isso para vários servidores Ubuntu e para todos os usuários, eu queria ter o FQDN completo no prompt, em vez de apenas o nome do host (o oposto do que você estava fazendo). Eu descobri que mudar o /etc/bash.bashrc não é suficiente. Eu também tentei mexer com o perfil diff.d arquivos, mas foi inútil porque a casa .bashrc é sempre aplicada por último.

O que acabei fazendo foi empurrar o script abaixo com ansible para todos os servidores e isso fez o truque para todos os usuários e para todos os aplicativos futuros.

    #!/bin/bash

        for userfolders in 'ls -d /home/*/'
          do
            for bashfiles in 'ls -1 ${userfolders}.bashrc'
            do
               sed -i 's|u@\h|u@\H|g' $bashfiles
            done
        done
   sed -i 's|u@\h|u@\H|g' /etc/bash.bashrc
   sed -i 's|u@\h|u@\H|g' /etc/skel/.bashrc
   sed -i 's|u@\h|u@\H|g' /root/.bashrc
    
por 01.12.2016 / 15:32