请注意emacs wiki上关于cygwin的相关信息:
http://www.emacswiki.org/emacs/TrampMode
我不使用EmacsW32,但我成功地在Cygwin和NT Emacs上使用TRAMP通过ssh。我从未成功地使用TRAMP而没有ssh代理(即提示凭据),因为你也注意到了它只是挂起状态,但是它与代理一起正常工作,所以我没有花时间去解决这个问题。假设你也愿意使用代理(并且已经生成了您的密钥并根据需要添加了authorized_keys文件),对我有效的方法是:
1.从cygwin运行ssh-agent。
2.通过cygwin启动NT Emacs(以便继承ssh代理环境变量)。
3.使用'sshx'作为TRAMP方法(可以在每个文件路径中手动指定它,但我建议使用
(setq tramp-default-method "sshx")
将其设置为默认值)。
这些要点都在Wiki中详细说明,但您还可以自动化一些内容:
对于第1步,bash配置文件会自动开始ssh代理(如果尚未运行),或者在我的身份过期时提示我输入密码。 (请参见下面的代码。)
对于第2步,我的Windows快捷方式的目标如下所示:
C:\cygwin\bin\bash.exe --login -c "env HOME=\"`cygpath '%APPDATA%'`\" /cygdrive/c/emacs/emacs-23.1/bin/runemacs.exe"
--login
参数意味着我的bash配置文件已执行,这确保在启动emacs之前始终已经完成了第1步。
(设置
HOME
对于TRAMP不是必需的,但
%APPDATA%
是NT Emacs的默认值,这可以防止Cygwin主目录占优势,因此无论您是否使用此快捷方式运行它,都可以保持您的emacs配置一致。)
最后,这是我cygwin .bash_profile中管理ssh-agent的代码。 它有点刻板,但适用于我。
请注意,我将我的身份过期时间设置为4个小时(14400秒)。 TRAMP可能会在发生这种情况后挂起(如前所述,我从未让它提示我输入凭据),因此请注意此问题。键入
C-g
以停止尝试连接。要恢复连接,通常只需启动另一个cygwin shell,重新输入密码,然后TRAMP就会再次正常工作。偶尔它仍然无响应,但杀死*tramp*缓冲区将解决该问题。当然,不过期您的身份应该就可以避免此问题,如果可以接受的话。
SSH_ENV="${HOME}/.ssh/environment"
function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent -t 14400 | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" >/dev/null
/usr/bin/ssh-add;
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" >/dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ >/dev/null || {
start_agent;
}
if ! /usr/bin/ssh-add -l >/dev/null; then
/usr/bin/ssh-add;
fi
else
start_agent;
fi
c:/cygwin
吗? - Mica