arquivo de ponto não originado ao executar um comando via ssh

12

Quando executo meu programa interativamente, funciona bem:

ssh somehost
$ ~/some/path/somescript.py

Quando executo meu programa diretamente no ssh, não funciona. A variável PYTHONPATH não está definida, porque .bashrc não é originado.

ssh somehost ~/some/path/somescript.py

Se eu executar ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py' , tudo funcionará bem.

Mas o último não funcionaria para outras pessoas, por exemplo usando tcsh e não tendo um ~/.bashrc ).

Qual é o comando para executar uma coisa via ssh em outro host que funcione para todos os shells?

    
por bzdjamboo 18.06.2011 / 00:16

2 respostas

12

Não há arquivo padrão por usuário que seja executado para logins não interativos. Você precisa tornar o programa independente, para que ele possa localizar suas dependências sem depender de variáveis de ambiente não-padrão, ou então definir explicitamente o ambiente, normalmente com

ssh somehost '. ~/.profile; exec ~/some/path/somescript.py'

Você não deve definir variáveis de ambiente em .bashrc : este arquivo é destinado a shells interativos e é lido em cada instância do bash. As variáveis de ambiente devem ser definidas em .profile , que é lido quando você efetua login. Além do número muito pequeno de pessoas que não usam shell estilo Bourne como shell de login, .profile funciona para todos, seja eles usam bash ou zsh ou csh ou peixe de forma interativa. Veja também Diferença entre .bashrc e .bash_profile , Quais arquivos de configuração devem ser usados para configurar variáveis de ambiente com o bash? .

Dito isto, existe uma maneira de criar um script toda vez que você faz o login no ssh com uma chave específica. Veja Existe uma maneira de enviar informações de configuração do shell quando SSHing para um host? , arquivos de inicialização sh sobre ssh .

    
por 18.06.2011 / 01:11
0

Eu tive o mesmo problema, mas para mim a solução foi diferente. Meu usuário não foi configurado para usar o bash como shell, ele usou zsh como shell, portanto, os arquivos de ponto bash não foram executados no login. Abra / etc / passwd com um editor de texto e procure seu nome de usuário e qual shell ele usa:

root:x:0:0:root:/root:/bin/zsh

Esta é a aparência da minha entrada de usuário. Observe que ele diz / bin / zsh em vez de / bin / bash. Para zsh, o arquivo de ponto correto é ~ / .zprofile. Seu conteúdo será executado toda vez que você fizer login usando ssh.

    
por 03.03.2015 / 19:11