En supposant que l'utilisateur a /bin/bash
comme Shell dans /etc/passwd
. Alors ssh user@Host command
exécute la commande à l'aide de Bash. Cependant, ce Shell n'est ni de connexion ni interactif, ce qui signifie ni ~/.bash_profile
ni ~/.bashrc
provient. Dans ce cas, comment définir la variable d'environnement PATH
pour que les exécutables puissent être trouvés et exécutés? Est-il recommandé de préfixer la commande réelle avec source ~/.bashrc
?
Vous avez peu de possibilités:
PATH
sur le serveur dans ~/.ssh/environment
(doit être activé par PermitUserEnvironment yes
dans sshd_config
)..bashrc
: préfixez la commande avec . ~/.bashrc
(ou source
)Cela dépend à peu près du cas d'utilisation, dans quelle direction vous irez.
Vous associez les paramètres locaux aux paramètres distants .
Localement, une instance bash, le shell en cours d'exécution dans lequel vous écrivez:
ssh user@Host command
Exécute la commande ssh (rien de plus) en tant que client ssh.
Pour ce faire, le shell local a besoin pas pour démarrer un sous-shell ou un nouveau shell ou se connecter .
La commande est exécutée comme une commande ls
est: localement.
C'est la commande client ssh qui ouvre une connexion réseau à un système distant , où, s'il est correctement authentifié, un nouvea Shell sera démarré pour exécuter la commande écrite comme argument dans ssh, ou, si aucun argument n'est donné, attendez d'autres commandes sur cette connexion.
Ce nouveau shell distant sera nécessairement un shell de connexion car l'utilisateur distant (sur ce système) doit être authentifié pour se connecter. Ou, si une commande spécifique est donnée, exécutez simplement cette commande avec les privilèges utilisateur authentifiés.
Vous pouvez voir quels fichiers proviennent en ajoutant un $file sourced
au début de chaque fichier (dans le système distant) (la racine est nécessaire pour changer /etc/
des dossiers):
$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done
Et puis il suffit de démarrer une console ssh:
$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read
Dans ce cas, les deux fichiers bashrc
ont été lus parce que chaque fichier profile
avait des commandes pour les inclure, et non parce que le shell de connexion les avait directement obtenus.
$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read
Dans ce système, où bashrc
est lu dans les deux cas.
Pas besoin d'ajouter un source ~/.bashrc
à la commande à exécuter.
Tout ce que vous devez faire est d'inclure les paramètres corrects pour modifier le "$ PATH", soit dans /etc/bash.bashrc
pour tous les utilisateurs qui démarrent un shell dans ce système. Ou dans ~/.bashrc
pour chaque utilisateur qui en a besoin. Vous pouvez ajouter (ou modifier) un squelette d'un utilisateur .bashrc
à /etc/skel/
pour que tout nouvel utilisateur créé ait le bon fichier disponible.
Ce qui précède n'est valable que pour bash. Si vous avez besoin que le paramètre fonctionne pour tous les shells, définissez probablement la variable d'environnement PATH à l'aide du fichier ssh ~/.ssh/environment
pour chaque utilisateur qui en a besoin. Ou utiliser /etc/ssh/sshrc
pour un paramètre global dans le système où le serveur ssh est exécuté (veuillez lire la section Fichiers dans man sshd
pour quelques détails supplémentaires).