Soluzione 1:
Supponendo che tu abbia UsePAM yes
in /etc/ssh/sshd_config
, e supponendo che tu voglia che queste variabili d'ambiente siano impostate per ogni utente, puoi avere pam impostare le variabili d'ambiente per te. Se hai le variabili d'ambiente definite in /etc/gitenv
potresti aggiungere questa riga a /etc/pam.d/sshd
auth required pam_env.so envfile=/etc/gitenv
Oppure, ispezionando questo file, potresti scoprire che esiste già un pam_env.so in uso e già un file a cui puoi aggiungere cose. Fai solo attenzione e assicurati di aver testato a fondo le tue modifiche prima di terminare la tua sessione ssh, poiché quando stai scherzando con pam, puoi interrompere completamente la tua capacità di accedere al tuo server, se non stai attento.
Soluzione 2:
Sto impostando una variabile d'ambiente per le mie connessioni SSH usando il ~/.ssh/environment
. Il file può contenere variabili nella forma VAR=value
, non è necessario esportarli esplicitamente.
Tuttavia, questo file di configurazione utente viene ignorato per impostazione predefinita dal processo del server SSH a meno che l'opzione PermitUserEnvironment non sia impostata su yes. Pertanto devi assicurarti di modificare /etc/sshd_config sul server SSH per aggiungere o aggiornare questo parametro:
PermitUserEnvironment yes
Devi ricaricare la configurazione del server SSH. Su RHEL o Suse Linux lo fai (come root)
/sbin/service sshd reload
(Eventualmente sostituire sshd con ssh se non funziona)
Su Ubuntu (usando upstart) lo fai
sudo reload ssh
Su qualsiasi altro Linux, puoi provare (come root)
/etc/init.d/sshd reload
(Sostituisci sshd con ssh o openssh o qualunque cosa corrisponda allo script di inizializzazione del server SSH)
Soluzione 3:
Non ho più un buon host condiviso, quindi non posso verificare se le soluzioni proposte sono valide. Questa rimarrà la risposta accettata, poiché ha funzionato da me quando ho posto la domanda. Anche le altre risposte potrebbero funzionare. Lascio che la community lo decida con voti positivi.
Ok. La soluzione è che non esiste una soluzione su un host condiviso divino. Ho provato di tutto, ma non funziona niente, quindi ho deciso di rimanere con ~/.ssh/authorized_keys:
command="~/connect.sh" ssh-rsa AAAAB3NzaC...
In ~/connect.sh:
#!/bin/bash
if [ -f "${HOME}/.env_profile" ]; then
source ~/.env_profile
fi;
if [ "x${SSH_ORIGINAL_COMMAND}x" == "xx" ]; then
$SHELL --login
else
eval "${SSH_ORIGINAL_COMMAND}"
fi;
E in ~/.env_profile:
export PATH=$PATH:$HOME/bin:$HOME/git/libexec/git-core
export LD_LIBRARY_PATH=$HOME/git/lib
export GIT_EXEC_PATH=~/git/libexec/git-core
export GIT_TEMPLATE_DIR=~/git/share/git-core/templates
Quindi devo copiare il command="..." in ogni chiave rsa nel file authorized_keys. Questa è la duplicazione del codice, ma non credo che ci sia un'altra soluzione su un buon host condiviso.