Étant donné le scénario:
- Machine distante : serveur SSH; l'utilisateur n'a pas de privilèges d'administrateur;
- Machine locale : client SSH; l'utilisateur a des privilèges d'administrateur.
Si l' utilisateur , se connectant à distance du local , souhaite interagir avec la télécommande à l' aide d'un shell non installé sur la télécommande , comment l' utilisateur peut- il accomplir cela seul?
Exemple: l' utilisateur utilise fish sur local et souhaite également l'utiliser sur remote , mais remote n'a que bash et zsh installés.
shell
ssh
not-root-user
sampablokuper
la source
la source
Réponses:
Installez votre shell préféré sur la machine distante. Vous n'avez pas besoin de privilèges d'administrateur pour cela, vous pouvez installer des programmes dans votre répertoire personnel, c'est juste moins pratique. Voir Installation sur debian 5 32 bits sans être root , Comment installer un programme localement sans privilèges sudo? , Garder une trace des programmes et autres questions .
Si vous souhaitez vous connecter automatiquement à un shell que vous avez installé vous-même au lieu de celui par défaut, voir Création d'un shell par défaut zsh sans accès root
Si tout ce que vous voulez faire est de manipuler des fichiers distants, vous pouvez utiliser SSHFS pour monter l'arborescence de répertoires distants sur votre machine locale.
Si vous n'avez pas de place dans votre répertoire personnel ou s'il s'agit d'un compte partagé, vous pouvez vous contenter de configurer un tunnel SSH inversé et de monter votre arborescence de répertoires locaux sur la machine distante avec SSHFS , en supposant que les deux machines exécutent la même architecture ( même variante Unix sur le même type de processeur). Si les deux machines ont des architectures incompatibles, vous pouvez même installer les programmes pour l'architecture distante dans votre répertoire personnel local. Cela peut ne pas être très pratique car vous devrez configurer correctement les chemins pour que les programmes trouvent leurs bibliothèques, fichiers de configuration et autres fichiers de données.
L' eshell d'Emacs est compatible avec Tramp : si vous passez à un répertoire distant dans Eshell, vous exécuterez des commandes sur la machine distante.
la source
Réponse simple: Non, vous ne pouvez pas utiliser sur un boîtier distant un programme qui n'est pas installé sur le boîtier distant.
Solution: vous n'avez pas besoin des privilèges d'administrateur pour installer un shell sur le système distant. Vous pouvez l'installer dans votre répertoire personnel mais vous devez probablement le compiler à partir des sources. En utilisant généralement quelque chose comme
configure --prefix=${HOME}/local
Dernière remarque: vous ne pouvez pas changer votre shell par défaut en un shell non "officiel" (voir
/etc/shells
) mais vous pouvez mettre quelque chose commeexec fish
dans votre.bashrc
la source
L'utilisateur peut utiliser sshfs pour monter sa télécommande $ HOME sur sa machine locale. Dans un tel scénario, l' utilisateur n'utiliserait pas directement son shell de choix sur la machine distante mais, mieux que rien.
la source
L'approche de base consiste à copier l'exécutable du shell sur l'hôte distant à l'aide de l'
scp
exécuter à l'aidessh
, par exempleLe
-t
est nécessaire pourssh
allouer un tty, ce qu'il ne ferait pas par défaut lors de l'exécution d'une commande à distance.Cela suppose que votre hôte distant exécute le même système d'exploitation. Sinon, vous voudrez comprendre le système d'exploitation distant et compiler un binaire (éventuellement statique) que vous pouvez copier.
la source
La réponse évidente, "installez la commande sur la machine distante", est la solution la plus propre, nous ne devons donc pas l'ignorer:
S'il est possible d'installer la commande en tant que root, par exemple avec
sudo apt-get install fish
,la commande peut être exécutée comme ceci:
ssh remote -t fish
La question est de savoir quoi faire lorsque nous ne pouvons pas installer une commande sur l'ordinateur distant.
Ou plus précisément, il s'agit du cas où l' on ne peut pas installer une commande en tant que root .
Cela ne signifie pas que nous ne pouvons pas installer du tout!
Ce qui est encore possible, c'est d'installer la commande dans le répertoire personnel en la construisant à partir de la source .
Cela a l'avantage de prendre en charge tous les fichiers de support associés qui peuvent être fournis avec une commande et la façon dont le programme les trouve. Dans l'
fish
exemple du shell, ce sont les fonctions d'achèvement, etc., toutes non disponibles si nous copions simplement lefish
binaire.Construire une commande à partir de la source nécessite des outils de développement et des fichiers de développement des bibliothèques utilisées, ce qui peut être trop compliqué.
Mais de nombreux programmes sont livrés avec tout ce dont ils ont besoin regroupés dans les sources, donc cela peut être facile. Difficile à dire avant, mais on peut juste essayer.
Pour installer une commande dans le répertoire personnel,
configure
le chemin d'installation est fourni avec - qui doit être vérifié dans les instructions de construction. Par exemple:Notez que ce n'est pas
sudo make install
comme d'habitude - car c'est tout l'intérêt de l'installer localement pour ne pas avoir besoin de sudo ici.Pour des informations générales sur l'installation de programmes à partir des sources, consultez askubuntu.SE: Comment installer un fichier .tar.gz (ou .tar.bz2)?
la source
Je ne pense pas que vous puissiez exécuter un shell qui se trouve sur une machine sur une autre. La seule façon de l'exécuter sur la machine distante est de l'installer.
la source