6 votes

(svn+ssh) faire en sorte que bash charge mon PATH via SSH

Ce problème survient lorsque j'essaie de faire svnserve (serveur Subversion) disponible sur un serveur via SSH. J'ai compilé SVN et l'ai installé dans $HOME/bin . L'accès local à celui-ci (pas par SSH) fonctionne bien.

Connexions à svn+ssh échouer à cause de :

bash: svnserve: command not found

En déboguant ça, j'ai trouvé que :

ssh user@server "which svnserve"

dit :

which: no svnserve in (/usr/bin:/bin)

C'est étrange, parce que j'ai mis à jour le chemin vers $HOME/bin dans mon .bashrc et l'a également ajouté dans ~/.ssh/environment . Cependant, il semble que le SSH ne le lise pas. Bien que lorsque j'exécute :

ssh user@server "echo $PATH"

Il fait imprimer mon chemin mis à jour !

Qu'est-ce qui se passe ici ? Comment puis-je faire en sorte que SSH trouve mon svnserve ? Merci d'avance

3 votes

Lorsque vous exécutez 'ssh user@server "echo $PATH"', $PATH est développé localement et vous obtenez donc le PATH de localhost. Essayez d'échapper à $ comme "echo \$PATH". (Cela ne résout pas votre problème, mais vous aidera à le résoudre).

0 votes

@lsc : cela explique le mystère de "echo $PATH", merci.

0 votes

Par ailleurs, vous pouvez mettre à jour le titre pour refléter votre problème réel (c'est-à-dire svn+ssh). Cela devrait vous aider à obtenir des réponses plus pertinentes.

4voto

John Kraft Points 4559

Vous pouvez essayer de lancer la commande via un bash en utilisant la commande -l pour qu'elle agisse comme un Shell de connexion.

ssh user@server "bash -l -c 'which svnserve'"

Comme indiqué dans les commentaires que j'ai laissés ci-dessus, vous devrez échapper tous les $ pour que les variables soient développées sur le serveur et non localement. Par exemple :

ssh user@server "bash -l -c 'echo \$PATH'"

mettre à jour :

En ce qui concerne votre question sur la raison pour laquelle .ssh/environment ne prend pas effet, je crois que la configuration par défaut de SSHd est d'ignorer les environnements des utilisateurs. Vous devez l'activer spécifiquement dans /etc/ssh/sshd_config (ou similaire) et ajouter :

PermitUserEnvironment yes

mettre à jour 2 :

Si vous n'avez pas accès à /etc/ssh/sshd_config, une solution possible (mais pas idéale) serait d'utiliser l'authentification par clé publique pour lancer svnserve à la connexion.

Voir http://svnbook.red-bean.com/en/1.4/svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.sshtricks

Notez que cela affectera votre capacité à vous connecter normalement via SSH. Pour ce faire, vous devez contourner l'authentification par clé publique :

svn -o PubkeyAuthentication=no user@server

0 votes

Merci, cela a du sens. Malheureusement, cela ne résout toujours pas mon problème initial qui est de faire tourner svnserve via SSH. Pour une raison quelconque, ssh ignore mon fichier .ssh/environemnt et à chaque fois que j'essaie de le faire, il ne tient pas compte de l'environnement.

0 votes

La réponse de @Eli a été mise à jour pour résoudre le problème de .ssh/environnement.

0 votes

Oopps je viens de remarquer que @Dennis vous a déjà indiqué cette direction. Je m'excuse pour la répétition.

3voto

Paulo Matos Points 269

Il se trouve que, .bashrc y .bash_profile ne sont exécutés que si vous êtes dans un Shell interactif. Lorsque vous vous connectez via ssh, vous n'êtes pas dans un Shell interactif, par conséquent, vos commandes personnalisées ne sont pas exécutées. PATH ne sont jamais exécutées. Vous pouvez associer un script aux sheels non-interactifs en utilisant BASH_ENV . Vérifiez également .ssh/environment ce qui vous donne une autre alternative. Le meilleur moyen d'en savoir plus est de faire man ssh .

Bonne chance !

0 votes

Désolé, mais j'ai noté que .ssh/environnement ne fonctionnait pas pour moi. Avez-vous des conseils sur ce qu'il faut écrire à cet endroit ? Par ailleurs, j'avais l'impression que le fichier .bashrc était inclus dans les shells non interactifs. Sinon, comment faire pour que mon PATH soit donné correctement via ssh (echo $PATH) ?

1voto

Charles Stewart Points 650

Vous pouvez exécuter une commande env :

ssh servername "env PATH=$REMOTEPATH which svnserve"

0 votes

Après avoir ajouté un point-virgule avant which il est dit : which: no svnserve in (/usr/bin:/bin)

0 votes

@Eli : pas de point-virgule - qui est un argument à env.

1voto

Dr Zimmerman Points 136

J'ai le même problème avec HostMonster, en raison d'un changement récent qu'ils ont fait. J'ai trouvé une solution dans un ancien fil de discussion à l'adresse suivante http://svn.haxx.se/dev/archive-2007-02/0204.shtml :

Sur votre poste de travail :

  • modifier ~/.subversion/config : localisez [tunnels] et ajoutez la ligne ssh=~/svnssh

  • créer ~/svnssh comme dans le lien :

    #!/bin/sh
    /usr/bin/ssh $1 /<ur_bluhost_home_path>/sshsvnserve -t

  • chmod +x ~/svnssh

Sur votre compte bleuhost :

  • créer ~/sshsvnserve le même contenu que le lien :

    #!/bin/sh
    /<ur_bluehost_home_path>/bin/svnserve $*

  • chmod +x ~/sshsvnserve

C'est ça. Le changement config [tunnels] modifie la commande lancée par svn lors de la manipulation de l'espace de noms svn+ssh et utilise ur ~/svnssh script à la place. Le script invoque ssh et passe dans le chemin complet à sshsvnserve sur ur compte bluehost. Et sshsvnserve redirige tout vers le chemin complet de svnserve, comme u l'installe. Cela a fonctionné pour moi, pas besoin de $PATH.

0voto

Ian Points 296

J'ai réussi à faire en sorte que ssh exécute des commandes en utilisant le chemin distant en exécutant :

ssh dist@d6 "bash --login -c 'env'"

Cela charge le .profile distant, etc. Ici, env peut être remplacé par la commande de votre choix.

J'ai des clés autorisées donc je n'ai pas eu besoin de mot de passe pour exécuter la commande ou ssh.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X