Как изменить команду, отправляемую TRAMP в Emacs при использовании plink в Windows?
В моем.emacs есть следующее:
(require 'tramp)
(setq tramp-default-method "plink")
Когда я бегу C-x C-f /plink:some_session:/
в Emacs где some_session
является определенным сеансом в PuTTY (в котором сохранена вся информация, такая как местоположение личного ключа, имя пользователя, тип соединения = ssh и т. д.), tramp выдает следующую команду (копируется из буфера *Messages*):
Tramp: Sending command ‘plink -ssh -t some_session " env 'TERM=dumb' 'PROMPT_COMMAND=' 'PS1=#$ ' /bin/sh " && exit || exit’
Вы можете видеть, что он проходит -ssh
флаг для plink
, Все работает нормально, когда я подключаюсь к удаленному хосту, который ожидает соединения ssh на порту 22.
Однако у меня есть удаленный хост, к которому мне нужно подключиться через порт 2222. Если я сохраню сеанс (some_new_session
) в PuTTY и попробуйте подключиться, используя следующие команды (или графический интерфейс PuTTY), вот что происходит:
- используя PuTTY GUI
- работает отлично
plink some_new_session
- Выдано из
cmd.exe
- работает нормально и могу подключиться
- Выдано из
plink -ssh some_new_session
- Выдано из
cmd.exe
- не работает
- Выдано из
Я отладил проблему и обнаружил, что когда -ssh
флаг передается plink
в любом случае он пытается подключиться к порту 22, даже если сохраненные состояния сеанса используют порт 2222. -ssh
он игнорирует порт, сохраненный в сеансе (что похоже на ошибку).
Если я пытаюсь подключиться с помощью C-x C-f /plink:some_new_session:/
в Emacs выдается команда
Tramp: Sending command ‘plink -ssh -t some_new_session " env 'TERM=dumb' 'PROMPT_COMMAND=' 'PS1=#$ ' /bin/sh " && exit || exit’
Я на самом деле не нуждаюсь в -ssh
флаг, потому что тип соединения SSH сохраняется в сеансе PuTTY. Так же -ssh
флаг заставляет соединение быть через порт 22, даже если сеанс сохранил его как порт 2222.
Мой вопрос:
Как я могу изменить команду, выданную tramp, чтобы она не вызывала plink с флагом -ssh?
2 ответа
plink
Метод предназначен для использования имени хоста. Если вы хотите (повторно) использовать сеанс, используйте plinkx
, лайк C-x C-f /plinkx:some_session:/
а также C-x C-f /plink:some_new_session:/
,
Я подозреваю, что изменение следующего решит проблему. Значение, которое я устанавливаю здесь, просто по умолчанию tramp-login-args
значение для метода "plink".
nb Другие стандартные методы tramp, использующие plink: "psftp", "pscp" и "plinkx".
(eval-after-load "tramp"
'(setf (cadr (assq 'tramp-login-args (cdr (assoc "plink" tramp-methods))))
'(("-l" "%u") ("-P" "%p") ("-ssh") ("-t") ("%h") ("\"")
("env 'TERM=dumb' 'PROMPT_COMMAND=' 'PS1=#$ '") ("/bin/sh") ("\""))))