ssh-completion mit zsh
Etwas was mich schon immer gestoert hat, wenn ich Dateien per scp kopierte, war die Tatsache, dass ich die Ordnerstruktur des Ziel-Rechners immer auswendig wissen muss, damit der scp-Befehl nicht fehlschlaegt. Dass ist noch ertraeglich, wenn ich mit der dortigen Ordnerstruktur vertraut bin, oder diese sich an die File-Hirarchy-Standards haelt. Aber sobald keines dieser Kriterien zutraf, musste ich mich stets zuerst per ssh auf dem Host einloggen, um mir den Zielordner rauszusuchen, um dann erst im zweiten Schritt die Datei(en) kopieren zu koennen. (Oft habe ich den midnight commander benutzt um mich per ssh durch die Ordner zu hangeln, aber das ist auch alles andere als “mal-eben-schnell” zu machen)
Das sahen wohl auch die zsh-Entwickler aehnlich und haben ihrer Shell einen Completion-Mechanismus dafuer spendiert: Dadurch kann ich beim Tippen des scp-Befehls mir das Zielverzeichniss genauso vervollstaendigen lassen, wie ein lokales Verzeichniss! Und dazu gehoert noch nicht mal viel; der Mechanismus ist aktiviert, sobald man die Completion-Maschinerie von zsh aktiviert hat:
#autoload -U compinit; compinit
Beispiel:
#scp ~/.zshrc Rechner1:/ho[TAB]
#scp ~/.zshrc Rechner1:/home/ho[TAB]
#scp ~/.zshrc Rechner1:/home/hogdarog/[ENTER]
Voraussetzung ist natuerlich, dass ein ssh-agent laeuft, sonst kann man nach jedem [TAB]-Druck sein Passwort eingeben ;-}
Noch komfortabler wird es, wenn man unter verschiedenen Benutzernamen auf unterschiedlichen Hosts arbeitet:
Dann kann man sich naemlich beide Teile komplettieren lassen:
#ssh r[TAB]
#ssh root@Re[TAB]
#ssh root@Rechner1[ENTER]
Der erste [TAB]-Druck komplettiert natuerlich Benutzer- UND Rechnernamen, da die zsh ja noch nicht wissen kann, ob ein Aufruf nur mit Rechnername (#ssh Rechner1) kommt, oder ob ein Benutzer vorangestellt werden soll. In der zweiten Zeile kann nur noch ein Rechnername komplettiert werden…
Feine Sache das!
Caveat: Sind die Benutzer auf dem lokalen Rechner nicht bekannt, so funktioniert das Verfolstaendigen nicht – da hilft es nur, eine bestimmte Benutzer-/Rechnernamen-Kombination in der ~/.ssh/config abzulegen:
Host Rechner1
User Benutzer1
So kann man den Benutzernamen weglassen; ssh sucht sich den schon aus der config raus. Sprich, sobald ich mich per “ssh Rechner1″ auf Host “Rechner1″ verbinde, benutzt ssh den Username “Benutzer1″
PS: Ich weiss leider nicht, seit welcher Version dieser Mechanismus eingebaut ist – ich benutze derzeit zsh 4.2.5
Falls die User-/Hostname-completion noch nicht installiert ist, kann man sie selbst initialisieren; Siehe dazu das zsh-wiki: http://zshwiki.org/home/examples/compsys/hostnames
-
28.9.2007 / 13:35
> Voraussetzung ist natuerlich, dass ein ssh-agent laeuft,
OK, starte ich mal einen (weiteren) “ssh-agent”en; da tut sich aber
nichts: Enter passphrase, Enter passphrase …Sollte ich jemals rausfinden, wie das funktioniert, komme ich zurück und beschreibe es. Versprochen!
-
2.10.2007 / 14:10
Hilft es, wenn du `eval ssh-agent` (Beachte die Backticks) eingibtst?
Such evtl. mal nach “screen ssh-agent reconnect” bei Google-Groups (Thread “screen 3.7.1 and ssh-agent”)
-
12.1.2008 / 0:11
Thanks for information.
many interesting things
Celpjefscylc -
16.3.2008 / 14:27
ssh-agent ist gar nicht vonn�ten, wenn man nur kein Passwort eingeben muss. Da man in der Regel ja schon eine Verbindung zu dem Rechner, von dem man Dateien kopieren will, aufgebaut hat, so kann man (wenn richtig konfiguriert) �ber diese Master-Connection alle Dateien �bertragen, auch ohne Eingabe von Passwort. Der entsprechende Eintrag in der ~/.ssh/config w�rde so aussehen:
Host Rechner1
HostName 10.0.1.23
User root
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%pDie beiden letzten Zeilen sind dabei die wichtigen…
Hinterlasse einen Kommentar
XHTML: Folgende Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
navigation
- [1] was ist [ pimp my shell ] ?
- [2] programme
- [3] skripte / dotfiles
- [4] shellshots
- [5] mitmachen
- [6] autoren
- [7] einloggen
- [8] impressum
aussehen
ältere beiträge
- 06.18 wirklich? so einfach?
- 06.17 fbcmd – update
- 06.04 worklog – die zeit im griff
- 05.30 google-reader >> snownews
- 05.28 fbcmd – facebook in der shell
- 05.28 bitlbee – alles in einem!
- 05.16 NoPaste/pastebin-Service über die Shell mit curl und sprunge.us
- 04.15 Die Heirloom-Tools – Unix unter Linux
- 02.13 dvtm – dwm für die Konsole
- 02.12 Wohin ist mein Speicherplatz: ncdu
beitrags-archiv
- Juni 2010 (3)
- Mai 2010 (3)
- Mai 2008 (1)
- April 2008 (1)
- Februar 2008 (4)
- Januar 2008 (1)
- Dezember 2007 (2)
- September 2007 (1)
- August 2007 (1)
- Juli 2007 (6)
- Juni 2007 (1)
- Mai 2007 (3)
kategorien
- allgemein (17)
- berichte (7)
- fun (2)
- gnu_screen (2)
- hintergrundwissen (3)
- how-tos (11)
- internes (6)
- programme (31)
- shells (6)
- tutorials (5)
- user-skripte (1)
- vim (5)
- webseiten (5)
4 Kommentare
Zum Kommentarformular | Kommentar rss [?] | trackback uri [?]