Откройте файл через SSH и Sudo с помощью Emacs



Я хочу открыть файл внутри Emacs, который находится на удаленном сервере, с полномочиями sudo на сервере. Я могу открыть локальные файлы с помощью sudo через Tramp следующим образом:



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


но я хочу использовать sudo на сервере:



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


но это дает мне полномочия sudo на моей локальной машине, он запрашивает мой пароль sudo на локальной машине. Есть ли способ использовать sudo на сервере?



кстати: Emacs не установлен на сервере

709   5  

5 ответов:

по состоянию на Emacs 24.3, аналог старого multi: синтаксис был наложен поверх современного tramp-default-proxies-alist подход, что означает, что вы можете еще раз выполнить несколько прыжков без какой-либо предварительной конфигурации. Подробнее см.:

зяg(tramp) Ad-hoc multi-hopsRET

С новым синтаксисом, каждый " хоп " разделяется |. Пример в руководстве это:

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

который подключается в первую очередь как bird@bastion, а оттуда в you@remotehost:/path

/su: или / sudo: на удаленных хостах

вы также можете использовать этот синтаксис для sudo/su для root (или, конечно, любого другого пользователя) на удаленном хосте:

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

важно: обязательно Укажите имя хоста явно:sudo:remotehost:, а не sudo:: (см. ниже).

поскольку это все еще использует прокси-механизм внизу,tramp-default-proxies-alist теперь должно включать значение ("remotehost" "root" "/ssh:you@remotehost:")

означает, что прокси /ssh:you@remotehost: будет использоваться всякий раз, когда вы запрашиваете файл как root@remotehost.

root - это пользователь по умолчанию для этих методов, но вы можете, конечно, также изменить на не-root пользователь с:

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

всегда указывайте имя удаленного хоста явно

вы, вероятно, привыкли использовать sudo:: или su:: и опуская имя. Если ты , проживающим на локальном хосте тогда это все еще нормально, но если вы прыгаете на удаленный сервер, то вы должны Укажите имя хоста для каждого прыжка-даже если оно совпадает с предыдущим прыжком. Всегда используйте sudo:hostname: или su:hostname: С пультом дистанционного управления принимать гостей.

ловушка вот в чем sudo::тут на самом деле, кажется, работает -- когда вы сделаете это хост для записи динамического прокси будет имя хоста вы возникла от, а не от хоста, к которому вы подключены. Это не только будет выглядеть запутанным (как неправильный хост будет отображаться в пути к файлам), но это также будет означать, что любая последующая попытка использовать sudo:: на вашем локальном хосте вместо этого будет проксирован на удаленный сервер! (и прокси-сервер также предположительно будет сбит, если вы сделаете то же самое на втором сервере, что вызовет дальнейшие проблемы).

короче говоря, не используйте :: когда вы многозвенного!

обновление: хотя этот ответ решил исходную проблему, он был написан для emacs 20 или 21. Для emacs 24, я рекомендую вам использовать phils это потому что он предлагает больше объяснений и актуальной.


Я думаю имена файлов с несколькими прыжками в бродяге это то, что вы ищете.

первый прыжок будет ssh, а второй-sudo.


обновление: последние версии emacs поддерживают несколько хмель с помощью прокси:

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

затем вызовите, открыв:

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

у меня были некоторые проблемы с выбранным ответом. Однако это сработало, когда я добавил эту строку.emacs:

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

и затем выполнил следующее:

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

Это было немного запутанно, потому что в какой-то момент мне было предложено ввести пароль "root", но ввод пароля моего пользователя предоставил мне доступ. Оно также универсально работает на всех хостах в сети. Кроме того, я все еще могу сделать это, чтобы не быть корень:

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

С бродяга мульти-хмель конфигурации веб-страницы

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

тогда любой

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

откроется файл с помощью судо после регистрации с тем же именем пользователя, работающего под управлением emacs, но на удаленной машине.

сначала вы должны ssh на сервер, затем вы должны запустить emacs локально.

или вы можете использовать NFS с no_root_squash, или вы можете попробовать с Emacs server / client, хотя я понятия не имею, что может произойти (не используйте emacs сам)

Comments

    Ничего не найдено.