Начиная с 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 неизвестна.)