XForwarding não está carregando o $ PATH correto

2

Eu tentei o NetBeans XForward no meu laptop, usando o seguinte código:

# This does not work
$ ssh [email protected] -Y netbeans
which: no javac in (/usr/bin:/bin:/usr/sbin:/sbin)
which: no java in (/usr/bin:/bin:/usr/sbin:/sbin)
Cannot find java. Please use the --jdkhome switch.

Isso não funcionou, mas foi o que aconteceu:

# This works
$ ssh [email protected] -Y
user@home $ netbeans

Minhas perguntas:

  • Por que o primeiro método falha?
  • Como posso fazer o primeiro método funcionar?
por Stefan 12.11.2010 / 21:38

2 respostas

2

ssh example.com somecommand não lê seu ~/.profile ; somecommand é executado diretamente pelo daemon ssh. Quando você não especifica um comando, o daemon ssh chama seu shell de login, que lê seu ~/.profile . (Substitua ~/.bash_profile , ~/.zprofile ou ~/.login dependendo do seu shell de login.)

Existem algumas maneiras de definir variáveis de ambiente para um comando não interativo, mas todas exigem uma configuração na configuração do servidor, normalmente desativada por padrão. Assumindo um OpenSSH recente em ambos os lados:

  • Você pode ter variáveis de ambiente enviadas do cliente para o servidor com a diretiva SendEnv em ~/.ssh/config . A variável de ambiente específica deve ser ativada com uma diretiva AcceptEnv na configuração do servidor .

  • Você pode definir variáveis de ambiente por meio de ~/.ssh/environment no lado do servidor. Isso deve ser ativado na configuração do servidor com a diretiva PermitUserEnvironment .

  • Supondo que você use autenticação baseada em chave, você também pode definir variáveis por origem em ~/.ssh/authorized_keys : adicione environment="FOO=bar" no início da linha relevante. Novamente, você precisa da diretiva PermitUserEnvironment na configuração do servidor.

Se você não puder ou não quiser alterar a configuração do servidor, será necessário gravar o caminho completo para o comando remoto ou fornecer explicitamente seu .profile no comando remoto.

ssh [email protected] -Y '. ~/.profile; netbeans'
ssh [email protected] -Y '/path/to/netbeans'
    
por 12.11.2010 / 22:06
1

Na página de manual do ssh (1) (minha ênfase):

If command is specified, it is executed on the remote host instead of a login shell.

Em outras palavras, ele não faz um "login" no sistema remoto quando você passa um comando para o ssh. Ele executa seu shell no modo não-login, não interativo, que faz com que um conjunto diferente de arquivos de inicialização seja executado.

Você deve verificar onde a variável PATH está sendo definida e movê-la para o arquivo apropriado. Se o seu shell é bash, por exemplo, você deve usar .bashrc e não .bash_profile .

    
por 12.11.2010 / 21:44