Para um mesmo usuário unix ou linux, diferentes conjuntos de variáveis de ambiente

5

Estou usando tcsh e, para um projeto específico, todos os membros da minha equipe se conectam a um servidor com o mesmo usuário. (Isso é algo que não podemos mudar).

A situação surge porque eu quero ter algumas variáveis de ambiente personalizadas e aliases, e para isso eu tenho meu próprio arquivo .tcshrc (ou seja, .tcshrc_cust ) que eu carrego como a primeira ação ao conectar a essa máquina:

source .tcshrc_cust

e mesmo que isso funcione muito bem, estou tendo um problema ao usar vim : se eu chegar ao shell de dentro do vim (com :sh ) eu caio em um shell normal, sem meu env personalizado. vars. e aliases.

Existe uma solução para isso, além de usar um usuário diferente nessa máquina?

SOLUÇÃO (dada por @Shawn):

Prefixei minha chave em .ssh/authorized_keys com:

command="setenv subuser noz; tcsh"

e escreveu no final do arquivo .tcshrc estas linhas:

if ($?subuser) then
    source .tcshrc_$subuser;
endif

E tudo funciona bem agora.

    
por nozimica 18.10.2011 / 23:58

3 respostas

4

Você pode fazer com que .tcshrc verifique uma variável de ambiente especial (como subuser ) e condicionalmente source .tcshrc_cust . Quando você efetuar login, execute subuser=nozimica tcsh . Ele obterá essa variável enironment e executará seu script rc personalizado. Além disso, o comando :sh do vim funcionará. Você pode até fazer a fantasia e source .tcshrc_$subuser ; Dessa forma todos poderiam fazê-lo.

Você pode pular a parte em que você executa subuser=nozimica tcsh quando fizer login fazendo com que o ssh o execute para você. Se você configurar a autenticação da chave ssh, em ~/.ssh/authorized_keys no servidor, você poderá prefixar sua chave com command="subuser=nozimica tcsh" e o ssh executará esse comando para você.

    
por 19.10.2011 / 02:24
2

Você pode enviar variáveis de ambiente da sua máquina local usando o SSH.

Por exemplo, insira export FOO_USER="$USER" (na versão tcsh do .bash_profile ) ou FOO_USER=joe ssh remote-host (na linha de comando) em sua máquina local. Edite seu ~/.ssh/config para incluir isto: SendEnv LANG LC_* FOO_USER .

Em seguida, no servidor remoto, você pode verificar essa variável no .bash_profile (ou o que você tem em tcsh ) e executar a ação apropriada:

if [ "$FOO_USER" = 'joe' ]; then
    export PS1='--[ Joe rules ]-- \u@\h \w \$ ';
    source tcsh.joe;
elif [ "$FOO_USER" = 'jane' ]; then
    alias ll='ls -Al';
fi

Por padrão, o servidor SSH aceita somente LANG e LC_* , por isso, se você não pode editar /etc/ssh/sshd_config no servidor para adicionar AccceptEnv LANG LC_* FOO_USER , pode alterá-lo abusando das variáveis LC_* , por exemplo %código%. Atualize seu LC_FOO_USER=joe s (ou melhor, os arquivos .bash_profile locais e remotos apropriados) de acordo.

    
por 19.10.2011 / 22:18
1

Minha equipe e eu enfrentamos um problema semelhante com uma conta compartilhada. Nós criamos basicamente a mesma solução, otimizando-a um pouquinho.

Veja o que fazemos. (Usamos ksh , não sei muito sobre tcsh , mas suponho que seja bem parecido).

  • Retire .tcshrc para um mínimo, para que seja pouco utilizável.

  • Força cada usuário a usar um .tcshrc_cust

E no original tcshrc adicione algo assim:

 alias u1='source .tcshrc_user1'
 alias u2='source .tcshrc_user2'
 alias u3='source .tcshrc_user3'

A idéia é que é mais conveniente digitar apenas duas letras do que um comando inteiro. Além disso, se toda a equipe estiver fazendo isso, ela se tornará mais adotada e mais fácil de manter.

Eu não estou dizendo que é uma solução perfeita, e eu tenho procurado a mesma coisa que você por um tempo agora, é o melhor que eu poderia fazer. Vamos esperar que alguém tenha uma ideia melhor:)

    
por 19.10.2011 / 01:54