在Windows上使用plink时,如何更改EAMP中TRAMP发送的命令?

时间:2017-04-05 23:53:42

标签: emacs putty plink tramp

我的.emacs中有以下内容:

(require 'tramp)
(setq tramp-default-method "plink")

当我在Emacs中运行C-x C-f /plink:some_session:/,其中some_session是PuTTY中定义的会话(其中保存了所有信息,例如私钥的位置,用户名,连接类型= ssh等),tramp发出以下命令(从* Messages * buffer复制):

Tramp: Sending command ‘plink -ssh -t some_session " env 'TERM=dumb' 'PROMPT_COMMAND=' 'PS1=#$ ' /bin/sh " && exit || exit’

您可以看到它将-ssh标记传递给plink。当我连接到需要端口22上的ssh连接的远程主机时,一切正常。

但是,我有一个远程主机,我需要在端口2222上连接。如果我在PuTTY中保存会话(some_new_session)并尝试使用以下命令(或PuTTY gui)进行连接,这是会发生什么:

  • 使用PuTTY GUI
    • 工作正常
  • plink some_new_session
    • cmd.exe发出 - 工作正常且能够连接
  • plink -ssh some_new_session
    • cmd.exe发出 - 无效

我已经调试了这个问题,发现当-ssh标志传递给plink时,无论如何它都会尝试连接端口22,即使保存的会话声明使用端口2222.基本上在给定{时{1}}它忽略了会话中保存的端口(感觉就像一个bug)。

如果我尝试使用Emacs中的-ssh进行连接,则发出的命令为:

C-x C-f /plink:some_new_session:/

我实际上不需要Tramp: Sending command ‘plink -ssh -t some_new_session " env 'TERM=dumb' 'PROMPT_COMMAND=' 'PS1=#$ ' /bin/sh " && exit || exit’ 标志,因为SSH的连接类型保存在PuTTY会话中。此外,-ssh标志强制连接通过端口22,即使会话已将其保存为端口2222.

我的问题是:

如何更改tramp发出的命令,以便它不会使用-ssh标志调用plink?

2 个答案:

答案 0 :(得分:2)

plink方法旨在使用主机名。如果您想要(重复使用)会话,请使用plinkx,例如C-x C-f /plinkx:some_session:/C-x C-f /plink:some_new_session:/

答案 1 :(得分:1)

我怀疑修改以下内容会解决问题。我在这里设置的值只是" plink"的默认tramp-login-args值。方法

n.b。使用plink的其他标准tramp方法是:" 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") ("\""))))