Beachten Sie die Cygwin bezogenen Informationen im Wiki Emacs: http://www.emacswiki.org/emacs/TrampMode
Ich benutze EmacsW32 nicht, aber ich erfolgreich TRAMP über ssh mit Cygwin und NT Emacs verwenden.
Ich habe nie funktioniert TRAMP ohne ssh-Agent (d. H. Aufforderung zur Eingabe von Anmeldeinformationen) - wie Sie bemerkt haben, hängt es einfach - aber es funktioniert gut mit einem, so dass ich nicht verbrachte Zeit versuchen, das zu lösen. Angenommen, Sie sind auch glücklich, einen Agenten zu verwenden (und Sie haben bereits Ihre Schlüssel erzeugt und hinzugefügt authorized_keys-Dateien je nach Bedarf), den Ansatz, die für mich funktioniert, ist:
- Run ssh-agent von Cygwin.
- Starten Sie NT Emacs über Cygwin (damit er die Umgebungsvariablen ssh-agent erbt).
- Verwenden Sie 'sshx' als die TRAMP-Methode (Sie können es manuell in jedem Dateipfad angeben, aber ich empfehle, es als Standard zu setzen, mit
(setq tramp-default-method "sshx")
).
Diese Punkte alle im Wiki abgedeckt sind, aber Sie können auch Dinge automatisieren etwas:
Für Schritt 1 mein bash Profil startet automatisch eine SSH-Agent, wenn man nicht bereits ausgeführt wird, oder fordert mich für meine Passphrase, wenn meine Identität abgelaufen ist. (. Siehe Code unten)
Für Schritt 2 sieht das Ziel meiner Windows-Verknüpfung für den Start Emacs wie folgt aus:
C:\cygwin\bin\bash.exe --login -c "env HOME=\"`cygpath '%APPDATA%'`\" /cygdrive/c/emacs/emacs-23.1/bin/runemacs.exe"
Das --login
Argument bedeutet mein bash Profil ausgeführt wird, was diesen Schritt wird sichergestellt, 1 ist immer schon erledigt, bevor Emacs gestartet wird.
(HOME
Einstellung ist für TRAMP nicht notwendig, aber %APPDATA%
ist der Standard unter NT Emacs, und dies verhindert das Cygwin Home-Verzeichnis aus Vorrang nehmen, damit Ihre Emacs halten konsequent Config unabhängig davon, ob Sie diese Abkürzung, um sie auszuführen .)
Schließlich ist hier der Code von meinem cygwin .bash_profile, das meine ssh-Agent verwaltet. Es ist ein bisschen hacky, aber es funktioniert für mich.
Beachten Sie, dass meine Identität nach 4 Stunden (14400 Sekunden) abgelaufen ist. TRAMP kann hängen bleiben, nachdem das passiert ist (wie zuvor erwähnt, habe ich es nie bekommen, um mich nach Anmeldeinformationen zu fragen), also sei dir dieses Problems bewusst. Geben Sie C-g
ein, um zu verhindern, dass eine Verbindung hergestellt werden kann. Um die Konnektivität wieder aufzunehmen, können Sie im Allgemeinen einfach eine andere Cygwin-Shell starten, Ihre Passphrase erneut eingeben, und dann wird TRAMP wieder glücklich. Gelegentlich hat es nicht reagiert, aber das Töten des * tramp * -Puffers wird das beheben.Das Auslaufen Ihrer Identität sollte dieses Problem natürlich nicht umgehen, sollte dies akzeptabel sein.
SSH_ENV="${HOME}/.ssh/environment"
# Run ssh-agent, if one is not already running
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;
}
# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" >/dev/null
#ps ${SSH_AGENT_PID} doesn't work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ >/dev/null || {
start_agent;
}
#if our ssh-added identity has expired (see -t option to ssh-agent)
#then we need to re-add it
if ! /usr/bin/ssh-add -l >/dev/null; then
/usr/bin/ssh-add;
fi
else
#no ssh-agent running at the moment
start_agent;
fi
haben Sie versucht, 'c: \ cygwin' mit dem Schrägstrich die andere Art und Weise? – Mica