windowsのntemacsでtrampを使おうとすると、
emacs
C-x C-f
Find File: /sshx:foo@bar:baz.txt
ssh_askpass: exec(/usr/sbin/ssh-askpass): No such file or directory
となって、動かない。
cygwinのminttyなどの端末でssh-agent, ssh-addを実行してsshのパスフレーズを入力し、その端末からntemacsを起動すれば、ntemacs上でパスワードやパスフレーズを入力する必要がないので、trampが期待通りに動く。
cygwin-shell
% eval `ssh-agent`
Agent pid 12748
% ssh-add
Enter passphrase for /home/USER/.ssh/id_rsa:
Identity added: /home/USER/.ssh/id_rsa (/home/USER/.ssh/id_rsa)
% /cygdrive/c/emacs-25.1/bin/emacs
しかしtrampの使用頻度は少ないので、常に端末からemacsを起動しておくのは面倒であり、普段は端末からではなくショートカットをクリックするだけでntemacsを起動したい。そしてtrampを使いたいときには、ntemacsを再起動せずにそのまますぐに使いたい。
cygwinの端末でssh-agent, ssh-addを実行するとSSH_AUTH_SOCK
とSSH_AGENT_PID
の二つの環境変数が設定されるので、trampを使いたいときには同じ値をemacs上で設定すればよい。
emacs
M-x eval-expression
Eval: (setenv "SSH_AGENT_SOCK" "/tmp/ssh-xxxxx")
M-x eval-expression
Eval: (setenv "SSH_AGENT_PID" "12345")
コピー&ペーストは面倒なので、emacsclientを使って簡単に設定できるようにした。
.zshrc
alias trampsetup='emacsclient -n -e "(progn (setenv ¥"SSH_AUTH_SOCK¥" ¥"$SSH_AUTH_SOCK¥") (setenv ¥"SSH_AGENT_PID¥" ¥"$SSH_AGENT_PID¥"))"'
init.el
(server-start)
ショートカットをクリックしてemacsを起動し、trampを使いたくなったら、cygwinの端末を起動して以下を実行する。
cygwin-shell
% eval `ssh-agent`
Agent pid 12748
% ssh-add
Enter passphrase for /home/USER/.ssh/id_rsa:
Identity added: /home/USER/.ssh/id_rsa (/home/USER/.ssh/id_rsa)
% trampsetup
"12748"
emacs
C-x C-f
Find File: /sshx:foo@bar:baz.txt
Tramp: Waiting for prompts from remote shell...done
Tramp: Found remote shell prompt on ‘bar’
Tramp: Opening connection for edge using sshx...done
Tramp: Inserting ‘/sshx:bar:/home/foo/baz.txt’...