我的.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)进行连接,这是会发生什么:
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?
答案 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") ("\""))))