Skip to Content

Emacs的TRAMP够强大

labrador 的头像
Emacs的TRAMP是用来访问scp/ssh/smb服务器上的文件,可以做到像读写本地文件一样编辑远程的文件。以下是我对TRAMP的配置。
(require 'tramp)
(let ((my-tramp-methods nil)
      (my-tramp-ssh-method 
       '("ssh" 
         (tramp-login-program "ssh") 
         (tramp-login-args (("%h") 
                            ("-l" "%u")
                            ("-p" "%p") 
                            ("-e" "none") 
                            ("-A")))
         (tramp-remote-sh "/bin/sh") 
         (tramp-copy-program nil) 
         (tramp-copy-args nil)
         (tramp-copy-keep-date nil)
         (tramp-password-end-of-line nil) 
         (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null") 
                         ("-o" "UserKnownHostsFile=/dev/null")
                         ("-o" "StrictHostKeyChecking=no"))) 
         (tramp-default-port 22))))
  (setq tramp-methods (dolist (elt tramp-methods my-tramp-methods)
    (if (string= (car elt) "ssh")
        (setq my-tramp-methods (cons my-tramp-ssh-method my-tramp-methods))
      (setq my-tramp-methods (cons elt my-tramp-methods))))))

(add-to-list 'tramp-default-user-alist
             '(nil "\\`host1\\.com\\'" "labrador"))
(add-to-list 'tramp-default-user-alist
             '(nil "\\`host2\\.com\\'" "labrador"))
(add-to-list 'tramp-default-proxies-alist
             '("\\`host2\\.com\\'" nil "/ssh:labrador@host3.com:"))
(add-to-list 'tramp-default-method-alist
             '("\\`host2\\.com\\'" nil "ssh"))
  • 2~23行是为了设置一下tramp-methods中ssh协议相关的内容,使得ssh支持ssh-agent forwarding,这样可以透过一个ssh服务器访问另一个ssh服务器,而不需要输入密码。其中关键起到作用的是第10行的("-A"),也就是运行ssh的时候打开ssh-agent forwarding功能;
  • 25~28行设置访问host1.com和host2.com所用的默认用户名;
  • 29,30行设置访问host2.com时需要通过host3.com作为代理;
  • 31,32行设置访问host2.com所默认用的协议。

发表新评论

  • 你可以在文本中使用BBCode标记语言。 URL会自动被转为链接。

更多关於格式化选项的信息

CAPTCHA
请验证您是否是机器人。
Image CAPTCHA
Enter the characters shown in the image.