Question

Je veux ouvrir un fichier dans Emacs qui est situé sur un serveur distant, avec des puissances de 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 sur la machine sudo locale. Y at-il un moyen d'utiliser sudo sur le serveur?

BTW: Emacs est pas installé sur le serveur

Était-ce utile?

La solution

Emacs 24.3, un analogue de la vieille syntaxe multi: a été en couches sur le dessus de l'approche tramp-default-proxies-alist moderne, ce qui signifie que vous pouvez à nouveau effectuer multi-sauts sans aucune configuration préalable. Pour plus de détails, voir:

C-h i g (tramp) Ad-hoc multi-hops RET

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

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

Ce qui se connecte d'abord comme bird@bastion, et de là à you@remotehost:/path

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

Vous pouvez également utiliser cette syntaxe pour sudo / su à la racine (ou bien sûr tout autre utilisateur) sur un hôte distant:

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

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

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

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

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

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

Indiquez toujours le nom d'hôte distant explicitement

Vous êtes probablement habitué à utiliser sudo:: ou su:: et en omettant le nom d'hôte. Si vous êtes Séjour sur le localhost alors c'est toujours très bien, mais si vous Hopping à un serveur distant alors vous doit spécifier le nom d'hôte pour chaque hop - même si elle est le même que pour le saut précédent. Utilisez toujours sudo:hostname: ou su:hostname: avec les hôtes distants.

Le piège est ici que sudo:: ne semblent effectivement travailler - mais quand vous faites que l'hôte pour l'entrée de proxy dynamique sera le nom d'hôte origine plutôt que de l'hôte vous êtes connecté. Cela permettra non seulement paraître confus (comme le mauvais hôte sera affiché dans les chemins de fichiers), mais il signifie aussi que toute tentative ultérieure d'utiliser sudo:: sur votre ordinateur local sera plutôt au serveur proxy à distance! (Et le proxy serait probablement aussi être frappée de plein fouet si vous avez fait la même chose sur un second serveur, ce qui provoque d'autres problèmes).

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

Autres conseils

Mise à jour : Bien que cette réponse a résolu le problème d'origine, il a été écrit pour emacs 20 ou 21. Pour emacs 24, je vous recommandons d'utiliser Phils Répondons car il offre plus d'explications et à jour.


Je pense que multi-hop noms de fichiers clochard est ce que vous cherchez pour.

Le premier saut serait ssh et le second serait sudo.


Mise à jour: Les versions récentes de emacs prennent en charge plusieurs sauts en utilisant des procurations:

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

Alors invoquer par l'ouverture:

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

J'ai eu quelques ennuis 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é comme suit:

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

Il était un peu confus parce qu'à un moment j'invité à entrer le mot de passe « root », mais entrant le mot de passe de mon utilisateur m'a accordé l'accès. Il travaille aussi universellement sur tous les hôtes sur le réseau. Aussi, je peux encore le faire pour ne pas être root:

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

De la clochard page de configuration multi-sauts

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

Alors tout

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

va ouvrir le fichier en utilisant sudo après connecté avec le même nom d'utilisateur de l'utilisateur en cours d'exécution emacs mais sur la machine distante.

Vous devez ssh dans le serveur d'abord, vous devez exécuter emacs localement.

Vous pouvez aussi utiliser NFS avec no_root_squash, ou vous pouvez essayer avec le serveur / client emacs, bien que je ne sais pas de ce qui peut arriver (ne pas utiliser moi-même emacs)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top