Carregar script no login do ssh (não interativo)


0

Estou tentando carregar módulos de ambiente de uma sessão remota não interativa e defina as variáveis ​​de ambiente de acordo.

Por exemplo, no meu bashrc eu normalmente chamo

module load /path/to/cmake/3.x.x

e quando eu executo "cmake --version" de um shell de login,

cmake v3.x.x

No entanto, quando eu executo isso com uma sessão remota não interativa, vejo cmake v2.xxx como o surdo.

ssh me@machine 'cmake --version'

Para contornar isso, eu tentei atualizar meu / etc / ssh / sshd_config para "PermitUserEnvironment yes"

Dentro do meu arquivo ~ / .ssh / environment, eu sou capaz de definir variáveis ​​de ambiente de acordo, e atualizar meu $ PATH. Isso funciona, e quando executando comandos remotamente por ssh eu posso ver meu caminho é Atualizada. isto é

ssh me@machine 'echo $PATH'

Eu também criei um arquivo ~ / .ssh / rc que eu posso confirmar que seja chamado. No entanto, embora eu tenha colocado o mesmo "module load /path/to/cmake/3.x.x", ainda vejo o carregamento da v2. O mesmo acontece se eu atualizar e exportar meu PATH dentro do meu .ssh / rc. Ele atualiza, mas parece que está aplicando a um shell diferente do que está sendo usado remotamente.

Eu não entendo porque ~ / .ssh / environment modifica as coisas para o shell atual, mas ~ / .ssh / rc modifica as coisas para um shell aparentemente diferente.

Alguma idéia de como eu posso usar módulos de ambiente remotamente?

obrigado

Respostas:


0

Na minha experiência, certamente com o RHEL eo Fedora, o ~ / .bashrc é executado no tipo de conexão SSH "não interativa" a que você está se referindo. Eu também uso o sistema de módulos (no RHEL), e não tenho nenhum problema com o carregamento de módulos do meu ~ / .bashrc quando eu executo um comando via SSH.

De acordo com a seguinte pergunta / respostas do site UNIX / Linux StackExchange, algumas distros contêm código em seu padrão .bashrc (de / etc / skel) para abortar se não forem interativas - pode ser que você tenha algo assim próximo ao topo do seu Também há discussão que parece confirmar que o bash, quando executado a partir do SSHD, executará o ~ / .bashrc.

https://unix.stackexchange.com/questions/257571/why-does-bashrc-check-whether-the-current-shell-is-interactive


Você está fazendo uma pergunta ou escrevendo uma resposta? Se a sua intenção foi deixar um comentário sobre o inquérito, leia-o "Por que eu preciso de 50 reputação para comentar" quando tiver a chance de garantir que você entenda como começar a comentar.
Pimp Juice IT

@Stingray: Sim, definitivamente não está chamando meu ~ / .bashrc ou / etc / bashrc, e é por isso que eu estava tentando seguir esse caminho. Estou usando o RHEL 6.9.
Jordan

RHEL6.9 aqui também, e se eu executar "ssh x @ y cmd", então meu ~ / .bashrc definitivamente será executado no sistema remoto. Também é o mesmo no RHEL4 / 5/7 para mim. Estranho, eu me pergunto o que é diferente em seu ambiente.
Stingray
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.