Come imposto $ PATH in modo tale che il comando `ssh user @ host` funzioni?

Non riesco a impostare un nuovo $ PATH tale da essere usato quando si eseguono i comandi tramite il comando ssh [email protected] command . Ho provato ad aggiungere export PATH=$PATH:$HOME/new_path a ~ / .bashrc e ~ / .profile sul computer remoto, ma l’esecuzione di ssh [email protected] "echo \$PATH" mostra che il cambiamento non è stato raccolto (mostra / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games). La macchina remota sta eseguendo Ubuntu 8.04.

Sono sicuro di poterlo suddividere in / etc / profile, ma questa non è una soluzione pulita e funziona solo quando si ha accesso root.

Come ha detto Grawity, ~ / .bashrc è quello che vuoi, dal momento che è originato da shell non interattive non interattive.

Mi aspetto che il problema che stai avendo abbia a che fare con il file predefinito Ubuntu ~ / .bashrc. Di solito inizia con qualcosa del genere:

 # If not running interactively, don't do anything [ -z "$PS1" ] && return 

Vuoi mettere qualcosa per shell non interattive prima di questa linea.

Hai un ~/.bash_login o ~/.bash_profile ?

Bash in modalità intertriggers controlla questi file e utilizza il primo esistente , in questo ordine:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

Quindi se hai un ~/.bash_profile , allora qualsiasi modifica che fai a ~/.profile sarà lasciata invisibile.

Bash in modalità non intertriggers legge talvolta il file ~/.bashrc (che è spesso anche l’origine degli script interattivi). Per “a volte” intendo che è dipendente dalla distribuzione: piuttosto stranamente, c’è un tempo di compilazione opzione per abilitare questo. Debian abilita la lettura di ~/.bashrc , mentre ad esempio Arch non lo fa.

ssh sembra utilizzare la modalità non intertriggers, quindi ~/.bashrc dovrebbe essere sufficiente. In caso di problemi come questo, di solito aggiungo alcuni echo per vedere quali file vengono eseguiti.

la documentazione di ssh dice:

Se il comando è specificato, viene eseguito sull’host remoto anziché su una shell di accesso.

per questo motivo l’aggiunta ai file bashrc non funziona. hai comunque le seguenti opzioni:

  1. Se l’opzione PermitUserEnvironment è impostata in sshd config, è ansible aggiungere l’impostazione PATH a ~/.ssh/environment

  2. ssh remotemachine 'bash -l -c "somecommand"'

Puoi sempre dire:

 ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH' 

Oltre alla risposta @signpolyma, dovrai aggiungere la tua esportazione prima di queste righe

 # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac 

Ho avuto lo stesso problema io stesso, risolto con:

 ssh [email protected] PATH=\$HOME/bin:\$PATH\; remote-command