En supposant que l'utilisateur a /bin/bash
comme shell dans /etc/passwd
. Exécute ensuite ssh user@host command
la commande à l'aide de Bash. Cependant, ce shell n'est ni de connexion ni interactif, ce qui signifie que ~/.bash_profile
ni ~/.bashrc
n'est sourcé. Dans ce cas, comment définir la PATH
variable d'environnement 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
?
18
.bashrc
est originaire, mais il a probablement un test d'interactivité au sommet. Les choses que vous mettez avant cette vérification devraient s'appliquer, et c'est ce que je fais pour forcer PATH lorsque le serveur n'autorise pas l'environnement ou l'utilisation de l'utilisateur~/.pam_environment
.Réponses:
Vous avez peu de possibilités:
PATH
sur le serveur dans~/.ssh/environment
(doit être activé parPermitUserEnvironment yes
danssshd_config
)..bashrc
: préfixez la commande avec. ~/.bashrc
(ousource
)Cela dépend à peu près du cas d'utilisation, dans quelle direction vous irez.
la source
~/.bashrc
n'est pas nécessaire, il se produit par défaut. Ce fait, il me semble que c'est une mauvaise idée.$PATH
ne se développe pas~/.ssh/environment
, du moins pas dansOpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019
.PermitUserEnvironment
(par défaut dans les versions récentes)PATH="$PATH:/new/path"
à mon~/.ssh/environment
moment où il aurait dû êtrePATH=$PATH:/new/path
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:
Exécute la commande ssh (rien de plus) en tant que client ssh.
Pour ce faire, le shell local n'a pas besoin de démarrer un sous-shell ou un nouveau shell ou une connexion.
La commande est exécutée comme une
ls
commande est: localement.C'est la commande client ssh qui ouvre une connexion réseau à un système distant , où, si elle est correctement authentifiée, un nouveau 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-la simplement 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 modifier les/etc/
fichiers):Et puis il suffit de démarrer une console ssh:
Dans ce cas, les deux
bashrc
fichiers ont été lus parce que chaqueprofile
fichier contenait des commandes pour les inclure, et non parce que le shell de connexion les avait directement obtenus.Dans ce système, où
bashrc
est lu dans les deux cas.Pas besoin d'ajouter un
source ~/.bashrc
à la commande pour l'exécuter.Changer le CHEMIN
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~/.bashrc
pour chaque utilisateur qui en a besoin. Vous pouvez ajouter (ou modifier) un squelette d'un utilisateur.bashrc
à/etc/skel/
avoir tout nouvel utilisateur créé avoir 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 en utilisant le fichier ssh
~/.ssh/environment
pour chaque utilisateur qui en a besoin. Ou utilisez-le/etc/ssh/sshrc
pour un paramètre global dans le système où le serveur ssh est exécuté (veuillez lire la section Fichiers dansman sshd
pour plus de détails).la source