SSH-Verbindungen leicht gemacht

Ich nutze regelmäßig SSH-Verbindungen zu diversen Rechnern. Im LAN z. B. zu meinem Receiver oder zu meinem Quake-3-Arena-Server. Da letzterer im Internet erreichbar ist, läuft SSH nicht auf dem Standardport sondern auf einen anderen um Scriptkiddies zu blocken und somit die Logdateien sauber zu halten. Somit muss ich jedes mal, wenn ich mich mit dem Rechner verbinden will ssh $Benutzer@$IP -p $Portnummer -i ~/.ssh/quake eingeben. Oder den Befehl aus der Historie von ZSH herausfischen. Das muss doch auch besser funktionieren, oder? Ja tut es.

Hierzu legt man, falls nicht schon vorhanden, als erstes die Datei ~/.ssh/config auf dem Rechner mit dem man sich mit dem Server verbinden will an. Nun erstellt man in dieser folgenden Eintrag.

Host quake
Hostname 192.168.1.220
Port 1234
User quake
IdentityFile /home/$Benutzer/.ssh/quake

In der ersten Zeile geben wir den Namen der Verbindung an. Hier kann man frei wählen. Als nächstes geben wir die IP des Rechners an zu dem wir uns verbinden möchten. Der Port muss angegeben werden, wenn wir einen, vom Standard abweichenden, Port eingestellt haben. In der nächsten Zeile wird der Benutzer angegeben mit dem wir uns auf dem Rechner einloggen möchten. Sollte man anstelle von Passwörtern SSH-Keys nutzen und hat man mehrere unter ~/.ssh liegen gibt man am besten mit IdentityFile auch noch die richtige Schlüsseldatei an.

Nachdem man die Datei abgespeichert hat, braucht man nun nicht mehr ssh $Benutzer@$IP -p $Portnummer -i ~/.ssh/quake eingeben sondern es reicht ganz bequem ssh quake.

Howdoi – Wie zum Geier ging das jetzt noch gleich?

Wer nicht oft mit tar arbeitet, kennt das Problem vermutlich. Wie ging das Erstellen eines Archives jetzt noch gleich? Keine Ahnung… Also dann rufen wir eben mal man tar auf und ackern uns durch die Manpage. Alternativ dazu kann man jetzt das Tool howdoi fragen. Will man also wissen, wie man ein tar-Archiv erstellt gibt man folgendes ein.

howdoi create tar archive

Und howdoi antworte darauf mit

tar -cf backup.tar --exclude "www/subf3" www

Wirklich ausgereift ist das Tool aber scheinbar nicht. Auf die “Frage” howdoi copy files erhält man irgendwie nicht die richtige Ausgabe…

As toolkit mentions above, Apache Commons IO is the way to go, specifically FileUtils . copyFile() ; it handles all the heavy lifting for you. And as a postscript, note that recent versions of FileUtils (such as the 2.0.1 release) have added the use of NIO for copying files; NIO can significantly increase file-copying performance , in a large part because the NIO routines defer copying directly to the OS/filesystem rather than handle it by reading and writing bytes through the Java layer. So if you're looking for performance, it might be worth checking that you are using a recent version of FileUtils.

Noli timere messorem

Heute morgen musste ich leider Gottes den Tod mit “VERDAMMTER MIST” zitieren. Mehrfach. Einer der besten Fantasy-Autoren hat die Bühne verlassen…

Sir Terry Pratchett ist gestern im Alter von 66 Jahren an den Folgen seiner Alzheimer-Erkrankung verstorben. Nun hat er die Gelegenheit herauszufinden ob der Tod wirklich nur in Großbuchstaben spricht. Aber vielleicht haben wir Glück und der Arzt findet noch ein Schild mit “Ich binne nicht tot!” um den Hals von Pratchett. Ich bezweifle es aber…

Mach es gut Terry.

Pakete unter Arch im Ram erstellen

Um das Bauen der Pakete unter Arch zu beschleunigen kann man die Paketverwaltung anweisen dies im Arbeitsspeicher zu tun.

Hierzu erstellt man in der /etc/fstab erst einmal folgenden Eintrag.

tmpfs /scratch tmpfs nodev,size=4G 0 0

Anstelle von /scratch kann man jederzeit auch ein anderes Verzeichnis angeben in dem der Arbeitsspeicher gemountet wird. Size= kann man weglassen. Allerdings werden dann bis zu 50 Prozent des vorhandenen Arbeitsspeicher genutzt.

Nachdem wir die Datei abgespeichert haben, schalten wir den Eintrag mittels mount -a scharf.

Nun muss noch die Datei /etc/makepkg.conf angepasst werden. In dieser suchen wir nach #BUILDDIR= und entfernen das # am Anfang der Zeile unter ändern alles nach dem = auf /scratch (bzw. das Verzeichnis das wir in der /etc/fstab angegeben haben, so dass BUILDDIR=/sratch dabei herauskommen sollte und speichern die Datei ab.

Pakete die nun aus den Sourcecode erstellt werden, z. B. aus AUR sollten nun um einiges schneller gebaut werden als z. B. auf der HDD.

Gesprächigkeit eines systemd-Service einstellen

Vor ca. zwei Wochen habe ich für ngb.to einen Quake-3-Arena-Server auf auf Basis von ioquake aufgesetzt. Als Distribution habe ich Arch Linux gewählt. Nachdem alles installiert war, wollte ich den Q3A-Server nach dem Booten und nach einem eventuelle Absturz neu starten lassen. Mittels eines systemd-Service kein Problem. Nur ist Q3A an sich eine Quasselstrippe und müllt die Logdateien gnadenlos zu. Vor allem wenn gezockt wird. Hier bin ich mir nicht sicher wie lange das mit der, im Raspberry Pi verbauten, Speicherkarte gut geht. Daher musste ein Weg her um Q3A zum Schweigen zu bringen.

Nach einer kurzen Suche in der Dokumentation von systemd wurde ich fündig. Hier hilft StandardOutput= weiter. Hierüber kann man die Standardausgabe eines Service definieren. Zur Auswahl stehen inherit, null, tty, journal, syslog, kmsg, journal+console, syslog+console, kmsg+console sowie socket. Da mich die Standardausgabe (X hast joined usw.) nun wirklich nicht interessiert, war ich gnadenlos und habe null gewählt. Somit werden die ganzen Ausgaben direkt gemülleimert und das Journal und somit auch die Speicherkarte werden geschont. Herausgekommen ist dann folgender Service.

[Unit]
Description=Startet ioquake3-Server

[Service]
User=q3a
ExecStart=/pfad/zum/Startscript/q3a.sh
StandardOutput=null
Restart=always

[Install]
WantedBy=multi-user.target

Wenn man will kann man auch noch StandardError= für eventuell auftretende Fehler definieren. Hier gelten wieder oben genannte Möglichkeiten. Gibt man dies nicht direkt in der Service-Datei an, wird der Standard inherit verwendet.