Executando script remoto via comando ssh

0

Eu tenho um script na máquina remota do servidor Debian e quero executar um comando invocando:

ssh server "find.sh"

Meu script find.sh está em:

/home/user/bin

Primeiro de tudo, eu corri o servidor ssh "echo $ PATH" e ele respondeu com este caminho:

/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Parece que a variável PATH está boa, mas não funciona. A única maneira de fazer isso funcionar foi invocando o caminho completo:

ssh server "/home/user/bin/find.sh"

Existe alguma maneira simples de fazê-lo funcionar sem especificar o caminho completo?

    
por shadox 01.06.2015 / 18:58

3 respostas

3

Você precisaria definir $PATH no seu arquivo ~/.bashrc no servidor de destino, no início do arquivo:

export PATH=$PATH:/home/user/bin

link :

Bash in non-interactive mode reads the file ~/.bashrc

    
por 01.06.2015 / 19:36
2

ssh server "echo $PATH" não é o mesmo modo de operação que ssh server "find.sh" . O primeiro contém metacaracteres de shell (especificamente, um espaço) e, portanto, serão executados pelo comando "sh -c especificado" '; o segundo não e, portanto, será executado por "exec ('specified_command')". A diferença é sutil, mas neste caso (porque é o shell que define a variável de ambiente) tem efeitos colaterais que você pode não estar esperando.

Você pode forçar um shell fazendo algo como ssh server 'bash -c "find.sh"'

    
por 08.06.2015 / 15:50
2

A digitação de ssh server "echo $PATH" expandirá PATH localmente. Portanto, o comando que você está realmente executando é ssh server "echo /home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" e o servidor produzirá a mesma saída toda vez que receber esse comando, independentemente de qual PATH esteja no lado do servidor. Se você deseja expandir PATH no lado do servidor, pode usar: ssh server 'echo "$PATH"' . Observe que aspas simples estão sendo usadas para impedir a expansão local de $PATH .

    
por 10.06.2015 / 00:41

Tags