Defina a variável de ambiente automaticamente no login SSH (sem acesso root)

3

A situação:

Eu corro o Ubuntu 12.04 LTS em uma máquina virtual.

Eu regularmente tenho que me conectar à minha conta em um servidor universitário, eu faço isso abrindo o terminal e usando ssh -Y [email protected] .

Uma vez lá, eu sempre tenho que executar o seguinte

setenv PYTHONPATH "place/stuff/this_goes_on_forever"

E também algumas outras linhas de código.

O que eu quero:

  1. Minha principal solicitação: Eu gostaria de preparar um script e executá-lo automaticamente sempre que eu fizer login no servidor via ssh.

  2. Esta é uma consulta secundária, mas quando eu uso alias p="pwd" (por exemplo) os novos aliases não 'pegam', digitar p nesse caso resulta em 'comando não encontrado'. Isso é apenas uma conseqüência de não ser root, ou porque eu estou logado via ssh, ou há uma correção para isso, talvez?

Tentativas de uma solução:

Eu tentei adicionar export PYTHONPATH="..." ao meu arquivo local ~/.bashrc , o que significa que quando eu inicio o terminal PYTHONPATH é definido, mas depois eu ssh para o servidor não está mais definido (bem, eu tenho um host totalmente novo variáveis de ambiente). Eu tentei ~/.bash_profile depois, não funcionou.

Eu tentei adicionar export PYTHONPATH="..." ao arquivo ~/.bash_profile no servidor e também ao arquivo ~/.bashrc , mas não funcionou.

Eu não tenho acesso root no servidor, por isso não posso alterar AcceptEnv ou PermitUserEnvironement dentro do arquivo sshd_config no servidor, ele é apenas de leitura.

Certamente há algum lugar em que posso colocar esse código, mas não consigo encontrar onde.

    
por Marchy 14.11.2013 / 15:23

3 respostas

1

Há duas coisas a considerar aqui:

  1. Parece que você não está usando bash no servidor remoto, portanto, .bashrc e .bash_profile não serão lidos.

  2. ssh inicia um shell de login no servidor remoto, portanto, mesmo que você estivesse executando bash , .bashrc não seria lido. Esse arquivo é lido apenas por shells interativos e não-login.

Muitos shells de login, no entanto, leem ~/.profile . Não posso ter certeza, pois você não mencionou qual shell está usando, mas é provável que, se você adicionar essa linha ao arquivo ~/.profile (no servidor remoto), receba a variável definida:

PYTHONPATH="place/stuff/this_goes_on_forever"

Como você está executando tcsh , os arquivos de inicialização são diferentes. De man tcsh :

   A login shell begins  by  executing  commands  from  the  system  files
   /etc/csh.cshrc  and  /etc/csh.login.   It  then  executes commands from
   files in  the  user's  home  directory:  first  ~/.tcshrc  (+)  or,  if
   ~/.tcshrc  is not found, ~/.cshrc, then ~/.history (or the value of the
   histfile shell variable), then ~/.login, and finally ~/.cshdirs (or the
   value  of  the  dirsfile  shell  variable)  (+).   The  shell  may read
   /etc/csh.login before instead of  after  /etc/csh.cshrc,  and  ~/.login
   before  instead  of  after  ~/.tcshrc or ~/.cshrc and ~/.history, if so
   compiled; see the version shell variable. (+)

Portanto, você deve adicionar seu comando setenv a ~/.tcshrc no servidor remoto.

Finalmente, uma vez que parece que você está mais acostumado com bash , por que você não muda o shell que você usa no servidor remoto? Basta fazer login no servidor e, em seguida, executar

chsh

Conceda /bin/bash como seu shell padrão e todos esses problemas desaparecerão. Em seguida, você poderá definir variáveis e aliases como esperado, editando ~/.profile ou ~/.bash_profile no servidor remoto.

    
por 14.11.2013 / 15:57
1

Parece que você está usando csh no servidor, adicione seu código ao csh start up lá. csh tem uma sintaxe um pouco diferente do bash para configurar aliases, faça um man csh no seu servidor para obter informações.

    
por 14.11.2013 / 15:34
0

Teste qual shell você está usando executando:

echo $SHELL

Se for bash e não estiver lendo automaticamente ~ / .bashrc, talvez seja necessário criar um arquivo ~ / .bash_profile.

$ cat .bash_profile 
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

Sobre isso:

I tried ~./.bash_profile after, didn't work.

Se você quis dizer que estava tentando originar o arquivo de perfil, essa sintaxe está errada. Para criar um arquivo de ambiente, execute isto:

. ~/.bash_profile
    
por 14.11.2013 / 17:10