Как изменить команду, отправляемую 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") ("\""))))
Другие вопросы по тегам