sessão ssh não-interativa não encontrando comando mesmo estando no PATH

3

Estou tentando executar um comando via ssh em um servidor executando o mac os 10.9.5 com um comando como

ssh server.address command

e estou recebendo o erro bash: command: command not found .

Quando eu faço login com uma sessão interativa, tudo funciona bem e o comando está em /usr/local/bin/command :

$ which command
/usr/local/bin/command

E quando eu pedir o caminho não interativo via ssh do cliente, ele inclui /usr/local/bin :

$ ssh server.address "echo $PATH"
/Users/me/.rvm/gems/ruby-2.1.10/bin:/Users/me/.rvm/gems/ruby-2.1.10@global/bin:/Users/me/.rvm/rubies/ruby-2.1.10/bin:/Users/me/anaconda3/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Library/TeX/texbin:/Users/me/.rvm/bin

Não sei por que não está encontrando o comando (ou qualquer um dos comandos em /usr/local/bin )

Suspeitei que fosse por causa desses caminhos estranhos no início de $PATH (como /Users/me/.rvm/gems/ruby-2.1.10@global/bin , mas não consigo encontrar onde eles estão sendo adicionados ao caminho, em primeiro lugar. Verifiquei ~/.bash_profile e ~/.profile . Esses caminhos rubis também não estão no PATH quando eu efetuo login interativamente.

Não sei ao certo para onde ir a partir daqui. Usar o caminho completo para o comando não é uma opção porque está sendo chamado de outro programa. (Além disso, é certo que isso acontecerá novamente se eu não conseguir que o /usr/local/bin esteja no meu caminho).

Agradecemos antecipadamente por qualquer ajuda!

    
por Peter M 24.03.2017 / 18:05

2 respostas

1
$ ssh server.address "echo $PATH"

retorna o $ PATH do seu shell local mesmo que esteja escrito no remoto. A expansão das variáveis entre aspas é feita antes de enviar o comando para o servidor. Para obter o caminho remoto, você precisa usar

$ ssh server.address 'echo $PATH'
    
por 24.03.2017 / 18:47
1

Então, basicamente, até onde eu sei, uma cópia de link

From ssh(1) manual page: "If command is specified, it is executed on the remote host instead of a login shell."

So in short when you actually login to the machine bash is started as a login shell and loads the appropriate files, when you connect remotely and issue a command it is run in the place of bash, which means that these files do NOT load. You can work around it with using su -l -c or similar in the command part of ssh.

A resposta simples é usar caminhos completos para seus arquivos em vez daqueles no $ PATH, facilmente encontrados usando which

which nano /usr/bin/nano

    
por 24.03.2017 / 18:28