Il mio problema è che devo impostare le variabili env (come GIT_EXEC_PATH) su un server. Ho bisogno di quelle variabili per ogni connessione (quindi tramite bash e anche dai comandi remoti). Sono riuscito a impostare quelle variabili bash con .bash_profile, ma ho problemi con i comandi remoti. Ho scoperto che è possibile scrivere i comandi in ~ / .ssh / authorized_keys prima dell'effettiva chiave rsa, ma non voglio scrivere lì sempre, ho bisogno di una soluzione permanente ... Ho scoperto che ~ / .ssh Il file / rc viene eseguito da ogni login ssh, quindi ho inserito le dichiarazioni delle variabili env, ma non ha funzionato. Le variabili sono impostate nel file rc, ma successivamente sono scomparse. : S Forse il file rc viene eseguito in una subshell: S Esiste un modo per definire quelle variabili in bash e nei comandi remoti senza duplicazione del codice?
Modificare:
Ho modificato la domanda, perché il server è un host condiviso godaddy, quindi ha una configurazione unica. I file / etc / ssh / sshd_config e / etc / ssh / ssh_config sono vuoti. Ci sono commenti in questi file, se sei curioso posso copiarlo qui.
- Il ~ / .bash_profile proviene (solo da connessioni bash),
- ~ / .bashrc non proviene mai,
- il ~ / .profile non viene mai fornito,
- l'ambiente ~ / .ssh / non viene mai fornito,
- ~ / .ssh / rc proviene da entrambi (bash e remote), ma penso che sia chiamato in subshell, perché le variabili scompaiono.
- ~ / .Ssh / authorized_keys proviene ogni volta, ma devo scrivere i comandi prima di ogni chiave rsa (quindi non voglio configurarmi con quello).
Sommario:
Posso configurare bene il bash (con .bash_profile), ma non posso configurare le chiamate remote. Questo è il problema. Sto cercando un file che proviene da entrambi i comandi bash e remoti.
Per esempio:
Il comando git-upload-pack trova il file exe, perché la variabile env GIT_EXEC_PATH è impostata, ma con remote: "git clone user@domain.com: myrepo local / myrepo" il server non trova quel comando, perché GIT_EXEC_PATH non è impostato.
Edit2:
Secondo questo , e i miei log di printenv: ~ / .ssh / rc è in esecuzione nella shell normale, non nella subshell, quindi è un indovinello il motivo per cui le variabili env non si attaccano ...
Ho creato un eseguibile: ~ / logenv :
echo "" >> mylog.txt
date >> mylog.txt
printenv >> mylog.txt
echo "" >> mylog.txt
E mettilo in ~ / .ssh / rc :
export AAA=teszt
source ~/logenv
Con bash login & "source logenv" il risultato è stato:
Tue May 15 04:21:37 MST 2012
TERM=cygwin
SHELL=/bin/bash
SSH_CLIENT=censored
SSH_TTY=/dev/pts/2
USER=myuser
AAA=teszt
MAIL=/var/mail/myuser
PATH=/usr/local/bin:/bin:/usr/bin
PWD=/home/content/65/7962465
SHLVL=3
HOME=/var/chroot/home/content/65/7962465
LOGNAME=myuser
SSH_CONNECTION=censored
_=/usr/bin/printenv
Tue May 15 04:21:41 MST 2012
HOSTNAME=censored
TERM=cygwin
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=censored
Tramite "ssh myuser@domain.com 'exec ~ / logenv'" remoto il risultato era:
Tue May 15 04:25:52 MST 2012
SHELL=/bin/bash
SSH_CLIENT=censored
USER=myuser
AAA=teszt
MAIL=/var/mail/myuser
PATH=/usr/local/bin:/bin:/usr/bin
PWD=/home/content/65/7962465
SHLVL=3
HOME=/var/chroot/home/content/65/7962465
LOGNAME=myuser
SSH_CONNECTION=censored
_=/usr/bin/printenv
Tue May 15 04:25:52 MST 2012
SHELL=/bin/bash
SSH_CLIENT=censored
USER=myuser
PATH=/usr/local/bin:/bin:/usr/bin
MAIL=/var/mail/myuser
PWD=/home/content/65/7962465
HOME=/var/chroot/home/content/65/7962465
Quindi il file rc viene fornito, ma successivamente le variabili scompaiono ...: S