Откройте файл через 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 не установлен на сервере
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