2017-04-05 1 views
1

Ich habe folgendes in meiner .emacs:Wie ändere ich den Befehl, der von TRAMP in Emacs gesendet wird, wenn Sie Windows verwenden?

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

Wenn ich C-x C-f /plink:some_session:/ in Emacs laufen, wo some_session eine definierte Sitzung in PuTTY (die alle Informationen wie Standort des privaten Schlüssels, den Benutzernamen, Verbindungstyp gespeichert hat = ssh, etc.), Getrampel gibt den folgenden Befehl ein (kopiert von * Nachrichten * buffer):

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

Sie können sehen, dass es passiert die -ssh Flagge zu plink. Alles funktioniert gut, wenn ich eine Verbindung zu einem Remote-Host, der die SSH-Verbindung an Port 22 erwartet.

Allerdings habe ich einen Remote-Host, den ich an Port 2222 verbinden muss. Wenn ich eine Sitzung speichern (some_new_session) in PuTTY und versuchen, mit den folgenden Befehlen (oder die PuTTY gui) zu verbinden das ist, was passiert:

  • mit der PuTTY GUI
    • funktioniert
    • Herausgegeben von cmd.exe - funktioniert gut und ist in der Lage
  • plink -ssh some_new_session
    • von cmd.exe Ausgestellt zu verbinden - nicht

ich das Problem debuggt habe funktioniert und festgestellt, dass, wenn die -ssh flag wird an plink übergeben, es versucht trotzdem, eine Verbindung über Port 22 herzustellen, obwohl die gespeicherte Sitzung angibt, Port 2222 zu verwenden. Bei Angabe von -ssh wird der in der Sitzung gespeicherte Port ignoriert (was sich wie ein Fehler anfühlt).

Wenn ich versuche, den Befehl ausgegeben mit C-x C-f /plink:some_new_session:/ in Emacs zu verbinden ist:

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

ich die -ssh Flagge eigentlich nicht brauchen, weil der Verbindungstyp ist SSH in der Sitzung PuTTY gespeichert. Auch die -ssh Flag zwingt die Verbindung über Port 22 zu sein, obwohl die Sitzung hat es als Port gespeichert 2222.

Meine Frage ist:

Wie kann ich den Befehl von tramp ausgegeben ändern, damit es nicht nennen mit der -ssh Flagge flitzen?

+1

Haben Sie versucht, 'tramp-methods' zu ändern, um zu ändern, wie es 'plink' aufruft? – donkopotamus

Antwort

1

Die Methode plink soll einen Hostnamen verwenden. Wenn Sie eine Sitzung wiederverwenden möchten, verwenden Sie plinkx, wie C-x C-f /plinkx:some_session:/ und C-x C-f /plink:some_new_session:/.

+0

Das sind gute Informationen. Ich war mir der plinkx-Methode nicht bewusst und habe meine Standardmethode '(setq tramp-default-method" plinkx ") geändert, um das Problem vollständig zu vermeiden! – vab2048

1

Ich vermute, das Ändern des folgenden wird das Problem beheben. Der Wert, den ich hier einstelle, ist einfach der Standardwert tramp-login-args für die "plink" -Methode.

n.b. Die anderen Standard-Tramp-Methoden, die plink verwenden, sind: "psftp", "pscp" und "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") ("\"")))) 
+0

Dies funktioniert nach dem Entfernen der '(" -ssh ")'. Tolles Stück E-Lisp. – vab2048

Verwandte Themen