120 votes

Ouvrir le fichier via SSH et Sudo avec Emacs

Je veux ouvrir un fichier à l'intérieur d'Emacs qui est situé sur un serveur distant, avec sudo pouvoirs sur le serveur. Je peux ouvrir les fichiers locaux avec sudo via Clochard comme ceci:

C-x C-f /sudo::/home/user/file

Mais je veux l'utiliser sudo sur le serveur:

C-x C-f /sudo::user@server/home/user/file

Mais cela me donne sudo pouvoirs sur ma machine locale, il demande mon mot de passe sudo sur la machine locale. Est-il un moyen d'utiliser sudo sur le serveur?

BTW: Emacs n'est pas installé sur le serveur

201voto

phils Points 30543

Comme d'Emacs 24.3, un analogue de la vieille - multi: de la syntaxe a été superposées à la moderne, tramp-default-proxies-alist approche, ce qui signifie que vous pouvez une fois de plus, effectuer des multi-houblon sans aucune configuration au préalable. Pour plus de détails, voir:

C-hig (tramp) Ad-hoc multi-hops RET

Avec la nouvelle syntaxe, chaque " hop " est séparé par |. L'exemple dans le manuel de l'est:

C-xC-f /ssh:bird@bastion|ssh:you@remotehost:/path RET

Qui se connecte tout d'abord en tant que bird@bastion, et à partir de là, you@remotehost:/path

/su: ou /sudo: sur des hôtes distants

Vous pouvez également utiliser cette syntaxe pour la commande sudo/su pour devenir root (ou tout autre utilisateur) sur un hôte distant:

C-xC-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET

Important: assurez-vous de spécifier le nom d'hôte de manière explicite: sudo:remotehost: plutôt que d' sudo:: (voir ci-dessous).

Comme cela utilise toujours le proxy mécanisme sous, tramp-default-proxies-alist doit maintenant inclure la valeur ("remotehost" "root" "/ssh:you@remotehost:")

Ce qui signifie que le proxy /ssh:you@remotehost: est destiné à être utilisé à chaque fois que vous demandez un fichier en tant que root@remotehost.

root est l'utilisateur par défaut de ces méthodes, mais bien sûr, vous pouvez également changer pour un utilisateur non-root avec:

C-xC-f /ssh:you@remotehost|sudo:them@remotehost:/path/to/file RET

Toujours spécifier le nom d'hôte distant explicitement

Vous avez probablement l'habitude d'utiliser sudo:: ou su:: et en omettant le nom d'hôte. Si vous rester sur le localhost puis c'est toujours très bien, mais si vous êtes de saut à un serveur distant, alors vous devez spécifier le nom d'hôte de chaque hop-même si c'est la même que pour la précédente hop. Toujours utiliser sudo:hostname: ou su:hostname: avec des hôtes distants.

Le piège ici est qu' sudo:: n' apparaissent réellement au travail -- toutefois , lorsque vous n'avez que l'HÔTE de la dynamique de proxy entrée sera le nom d'hôte vous est originaire de plutôt que de l'hôte que vous avez connecté. Ce ne sera pas seulement regarder confusion (comme le mauvais hôte sera affiché dans les chemins de fichier), mais cela signifie aussi que toute tentative ultérieure pour utiliser sudo:: sur votre localhost sera plutôt dirigée vers le serveur distant! (et le proxy doit probablement être touchée si vous avez fait la même chose sur un second serveur, causant plus de problèmes).

En bref, ne pas utiliser :: lorsque vous multi-hop!

21voto

Dave Bacher Points 7237

Je pense que le multi-hop les noms de fichiers en clochard est ce que vous cherchez.

Le premier saut serait ssh et le second serait de sudo.


Mise à jour: les Dernières versions d'emacs en charge plusieurs tronçons en utilisant des proxys:

(add-to-list tramp-default-proxies-alist ("my-sudo-alias" nil "/ssh:user@ssh-host"))

Ensuite invoquer par l'ouverture:

/sudo:my-sudo-alias:file-on-ssh-host

7voto

User1 Points 8352

J'ai eu des soucis avec la réponse choisie. Cependant, il a travaillé quand j'ai ajouté cette ligne .emacs:

(add-to-list 'tramp-default-proxies-alist '(".*" "\`root\'" "/ssh:%h:"))

Et puis exécuté le suivant:

/sudo:ssh-host:file-on-ssh-host

C'était un peu déroutant parce qu'à un moment j'ai été invité pour le "root" et le mot de passe, mais je rentre mon mot de passe utilisateur m'a accordé l'accès. Il a aussi universellement fonctionne sur tous les hôtes sur le réseau. Aussi, je peux toujours le faire pour ne pas être en root:

/ssh:ssh-host:file-on-ssh-host

3voto

goshawk Points 39

Depuis le clochard multi-houblon de la page web de configuration

 (add-to-list 'tramp-default-proxies-alist
                   '(nil "\\`root\\'" "/ssh:%h:"))
      (add-to-list 'tramp-default-proxies-alist
                   '((regexp-quote (system-name)) nil nil))

Puis tout

C-x C-f /sudo:remote-host:/file

ouvrir le fichier à l'aide de sudo après connecté avec le même nom d'utilisateur de l'utilisateur qui exécute emacs, mais sur la machine distante.

-13voto

Dan Andreatta Points 1443

Vous devez faire un ssh sur le serveur, vous devez ensuite vous lancez emacs localement.

Ou vous pouvez utiliser NFS avec no_root_squash, ou vous pouvez essayer avec emacs serveur/client, bien que je n'ai aucune idée de ce qui peut arriver (ne pas utiliser emacs moi-même)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X