Je veux ouvrir un fichier dans Emacs qui se trouve sur un serveur distant, avec des puissances sudo sur le serveur. Je peux ouvrir des fichiers locaux avec sudo via Tramp comme ceci:
C-x C-f /sudo::/home/user/file
Mais je veux utiliser sudo sur le serveur:
C-x C-f /sudo::user@server/home/user/file
Mais cela me donne des pouvoirs sudo sur ma machine locale, il demande mon mot de passe sudo sur la machine locale. Existe-t-il un moyen d'utiliser sudo sur le serveur?
BTW: Emacs n'est pas installé sur le serveur
Réponses:
Depuis Emacs 24.3, un analogue de l'ancienne
multi:
syntaxe a été superposé à l'tramp-default-proxies-alist
approche moderne , ce qui signifie que vous pouvez à nouveau effectuer des multi-sauts sans aucune configuration préalable. Pour plus de détails, consultez:C-hig
(tramp) Ad-hoc multi-hops
RETAvec la nouvelle syntaxe, chaque «saut» est séparé par
|
. L'exemple du manuel est:C-xC-f
/ssh:bird@bastion|ssh:you@remotehost:/path
RETQui se connecte d'abord comme
bird@bastion
, et de là àyou@remotehost:/path
/ su: ou / sudo: sur les hôtes distants
Vous pouvez également utiliser cette syntaxe pour sudo / su vers root (ou bien sûr tout autre utilisateur) sur un hôte distant:
C-xC-f
/ssh:you@remotehost|sudo:remotehost:/path/to/file
RETImportant : assurez-vous de spécifier explicitement le nom d'hôte:
sudo:remotehost:
plutôt quesudo::
(voir ci-dessous).Comme cela utilise toujours le mécanisme de proxy en dessous,
tramp-default-proxies-alist
devrait maintenant inclure la valeur("remotehost" "root" "/ssh:you@remotehost:")
Cela signifie que le proxy
/ssh:you@remotehost:
sera utilisé chaque fois que vous demanderez un fichier en tant queroot@remotehost
.root
est l'utilisateur par défaut pour ces méthodes, mais vous pouvez bien sûr également passer à un utilisateur non root avec:C-xC-f
/ssh:you@remotehost|sudo:them@remotehost:/path/to/file
RETSpécifiez toujours explicitement le nom d'hôte distant
Vous avez probablement l'habitude d'utiliser
sudo::
ousu::
et d'omettre le nom d'hôte. Si vous restez sur l'hôte local, c'est toujours bien, mais si vous sautez vers un serveur distant, vous devez spécifier le nom d'hôte pour chaque saut - même s'il est le même que pour le saut précédent. Utilisez toujourssudo:hostname:
ousu:hostname:
avec des hôtes distants.Le piège ici est que
sudo::
cela semble réellement fonctionner - cependant, lorsque vous faites cela, l'hôte de l'entrée de proxy dynamique sera le nom d'hôte dont vous êtes originaire plutôt que l'hôte auquel vous vous êtes connecté. Cela ne semblera pas seulement déroutant (car le mauvais hôte sera affiché dans les chemins de fichiers), mais cela signifiera également que toute tentative d'utilisation ultérieuresudo::
sur votre hôte local sera à la place envoyée par proxy au serveur distant! (et le proxy serait également vraisemblablement écrasé si vous faisiez la même chose sur un deuxième serveur, causant d'autres problèmes).Bref, ne l'utilisez pas
::
lorsque vous multi-hop!la source
/sudo:hostname:/etc/hosts
, j'obtiens ce à quoi vous vous attendez, mais lorsque je tape/sudo:abbrev:/etc/hosts
, j'obtiens le message "L'abréviation de l'hôte ressemble à un hôte distant, sudo ne peut utiliser que l'hôte local". Est-ce réparable?.ssh/config
entrées, et je n'ai aucun problème à utiliser/ssh:abbrev|sudo:abbrev:/etc/hosts
les abréviations de mon nom d'hôte. Il semble que vous ne sautiez pas d'abord vers l'hôte.tramp-default-proxies-alist
semble être correct. Pourtant, le comportement que j'ai décrit ci-dessus persiste. Mon fichier de configuration est-il erroné?/sudo:abbrev:/etc/hosts
comme vous l'avez dit dans votre commentaire précédent (ce qui est faux, comme mentionné), ou si vous utilisez le bon/ssh:abbrev|sudo:abbrev:/etc/hosts
. Votre fichier de configuration ssh est probablement correct, car vous pouvez évidemment l'utiliser autrement.Mise à jour : Bien que cette réponse ait résolu le problème d'origine, elle a été écrite pour emacs 20 ou 21. Pour emacs 24, je vous recommande d'utiliser la réponse de phils car elle offre plus d'explications et est à jour.
Je pense que les noms de fichiers multi-hop dans clochard sont ce que vous recherchez.
Le premier saut serait ssh et le second serait sudo.
Mise à jour: les versions récentes d'emacs prennent en charge plusieurs sauts en utilisant des proxies:
Puis invoquez en ouvrant:
la source
J'ai eu quelques problèmes avec la réponse choisie. Cependant, cela a fonctionné lorsque j'ai ajouté cette ligne à .emacs:
Et puis exécuté ce qui suit:
/sudo:ssh-host:file-on-ssh-host
C'était un peu déroutant car à un moment donné, on m'a demandé le mot de passe "root", mais la saisie du mot de passe de mon utilisateur m'a donné accès. Il fonctionne également universellement sur tous les hôtes du réseau. Aussi, je peux toujours faire ceci pour ne pas être root:
/ssh:ssh-host:file-on-ssh-host
la source
abc.xyz.com' looks like a remote host,
sudo 'ne peut utiliser l'hôte local" que dès que j'entre le deuxième deux-points dans "/sudo:abc.xyz.com:". Des idées? Emacs 23.1.1 sur Ubuntu 10.04 LTS.Depuis la page Web de configuration de tramp multi-sauts
Puis tout
ouvrira le fichier en utilisant sudo après s'être connecté avec le même nom d'utilisateur que l'utilisateur exécutant emacs mais sur la machine distante.
la source
Vous devez d'abord ssh dans le serveur, puis vous devez exécuter emacs localement.
Ou vous pouvez utiliser NFS avec no_root_squash, ou vous pouvez essayer avec le serveur / client emacs, même si je n'ai aucune idée de ce qui peut arriver (n'utilisez pas emacs moi-même)
la source