Utiliser un shell non installé sur la machine distante

9

É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.

sampablokuper
la source
1
@mikeserv, merci. Je ne peux pas comprendre l'appel au downvote, que je considère comme un cliquetis et un exclusionniste. Je n'ai aucun problème avec les changements de balises, mais je m'oppose à ce que ma question soit reformatée d'une manière qui réduit la clarté. Je n'utilise pas le chat, donc je ne peux pas en discuter là-bas.
sampablokuper
l'abus de gras est difficile à lire . Et des phrases manquant de nombreux mots.
Gilles 'SO- arrête d'être méchant'
2
@sampablokuper vous avez utilisé des caractères gras pour mettre l'accent au point qu'il est difficile à lire; de plus, vous approchez quand tout est souligné, rien ne l' est.
derobert
1
@Gilles, aucune des phrases de ma question ne manque de mots non plus.
sampablokuper
1
@derobert pour la classification (et donc la clarté), comme le font de nombreux manuels informatiques. Il y a trois systèmes qui interagissent dans ma question, et leurs noms (ou, si vous préférez, leurs références) sont en gras. Rien d'autre n'est audacieux. Avant que quelqu'un demande (je veux dire, vraiment! On me demande déjà de justifier des choix de formatage parfaitement compréhensibles!), Oui, l'un des systèmes est humain et les deux autres sont non humains. Et Gilles, merci, mais non, je ne voulais pas utiliser le formatage de code. Je préfère utiliser la mise en forme de code uniquement pour les commandes ou le code, qui ne sont pas présents dans ma question.
sampablokuper

Réponses:

6

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.

mkdir ~/remote.d
sshfs remote.example.com:/ ~/remote.d
ls ~/remote.d/

fusermount -u ~/remote.d

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.

Gilles 'SO- arrête d'être méchant'
la source
3

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 commeconfigure --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 comme exec fishdans votre.bashrc

andcoz
la source
2

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.

Arkadiusz Drabczyk
la source
2

L'approche de base consiste à copier l'exécutable du shell sur l'hôte distant à l'aide de l' scpexécuter à l'aide ssh, par exemple

scp /usr/bin/fish remote:fish && ssh -t remote '~/fish'

Le -test nécessaire pour sshallouer 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.

Mikel
la source
2

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' fishexemple du shell, ce sont les fonctions d'achèvement, etc., toutes non disponibles si nous copions simplement le fishbinaire.

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, configurele chemin d'installation est fourni avec - qui doit être vérifié dans les instructions de construction. Par exemple:

mkdir ~/local
./configure --prefix=~/local 
make
make install

Notez que ce n'est pas sudo make installcomme 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)?

Volker Siegel
la source
0

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.

env_explosion
la source