Начиная с Emacs 24.3, аналог старого multi:
синтаксиса был наложен поверх современного tramp-default-proxies-alist
подхода, что означает, что вы снова можете выполнять многоэлементные операции без какой-либо предварительной настройки. Подробнее см .:
C-hig (tramp)Ad-hoc multi-hops
RET
В новом синтаксисе каждый «переход» разделяется знаком |
. Пример в руководстве:
C-xC-f /ssh:bird@bastion|ssh:you@remotehost:/path
RET
Которая подключается сначала как bird@bastion
, а оттуда кyou@remotehost:/path
/ su: или / sudo: на удаленных хостах
Вы также можете использовать этот синтаксис для sudo / su для root (или, конечно, любого другого пользователя) на удаленном хосте:
C-xC-f /ssh:you@remotehost|sudo:remotehost:/path/to/file
RET
Важно : не забудьте указать имя хоста явно: 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/file
RET
Всегда указывайте удаленное имя хоста явно
Вероятно, вы привыкли использовать sudo::
или su::
опускать имя хоста. Если вы остаетесь на локальном хосте, это все еще нормально, но если вы переходите на удаленный сервер, вы должны указать имя хоста для каждого прыжка - даже если оно такое же, как и для предыдущего прыжка. Всегда используйте sudo:hostname:
или su:hostname:
с удаленными хостами.
Ловушка в том , что sudo::
это на самом деле , по всей видимости работы - однако , когда вы делаете что HOST для записи динамического прокси будет имя хоста возник из , а не хозяина вы подключены. Это не только будет выглядеть запутанным (поскольку в путях к файлам будет отображаться неправильный хост), но также будет означать, что любая последующая попытка использования sudo::
на вашем локальном хосте будет вместо этого перенаправлена на удаленный сервер! (и прокси-сервер также, вероятно, будет заблокирован, если вы сделаете то же самое на втором сервере, что вызовет дополнительные проблемы).
Короче говоря, не используйте, ::
когда вы многоскачиваете!
Emacs 27+
Начиная с Emacs 27.1 (или Tramp 2.4.2, если используется пакет GNU ELPA) ::
случай работает интуитивно, так что /ssh:you@remotehost|sudo::
будет использоваться повторно, remotehost
а не ваш собственный локальный хост, и поэтому вы не получите неверную запись прокси.
Кроме того, подобные /ssh:you@remotehost|sudo:localhost:
ошибки обнаруживаются и помечаются как ошибки пользователя.
Если вы склонны использовать смесь версий Emacs, включая версии до 27 (или вы советуете кому-то другому, кто может использовать более старую версию), то будет безопаснее продолжать рассматривать ::
как небезопасное при многопереходном переключении, чтобы избежать потенциальная неудача. (Т.е. явное указание правильного удаленного хоста останется самым безопасным подходом, если версия Tramp неизвестна.)