Daniel's Blog

SSH-Tuning

In diesem Artikel werde ich auf einige Möglichkeiten eingehen, den Umgang mit SSH bequemer zu gestalten.

Authentifizierung mit Public-Keys

Wenn man keine Lust hat, bei jeder Anmeldung das Passwort eingeben zu müssen, kann man die Anmeldung mittels Public-Key durchführen. Dazu muss man zuerst einen Public-Key erstellen (wenn man noch keinen hat). Dies ist unter Linux sehr einfach möglich mit dem Befehl:

ssh-keygen -t rsa

Alle Fragen kann man einfach mit Enter bestätigen. Anschließend muss der Public-Key noch auf den Server kopiert werden. Dazu gibt es unter Linux den Befehl:

ssh-copy-id user@server

Man muss dann noch ein letztes Mal das Passwort eingeben und danach läuft die Authentifizierung vollautomatisch ab.

ssh_config

In der ssh_config-Datei kann man sowohl die Standardeinstellungen für einige Webseiten (oder auch für alle) verändern, als auch einen Alias einrichten für Server die man häufig benutzt. Der Pfad zur Konfigurationsdatei ist ~/.ssh/config. Wenn die Datei noch nicht existiert, kann man sie einfach anlegen.

Wenn man z.B. für alle Sub-Domains von example.com die Komprimierung einschalten möchte, dann tun das folgende Zeilen:

Host *.example.com
  Compression yes

Der zweite Verwendungszweck gestaltet sich genauso einfach:

Host foo
  HostName example.com
  User bar
  Port 1234

Nun kann man die Verbindung mit ssh foo herstellen, anstatt jedesmal ssh bar@example.com -p1234 eintippen zu müssen.

SSH-Timeouts verhindern

Wenn man längere Zeit nichts in der SSH-Shell tippt, dann reagiert die Shell nicht mehr und bricht nach einiger Zeit mit der Fehlermeldung Write failed: Broken pipe ab. Um die zu verhindern, kann man folgendes in die ssh_config-Datei eintragen:

Host *
  ServerAliveInterval 60

Nun wird alle 60 Sekunden eine Keep-Alive-Nachricht geschickt und es tritt kein Timeout mehr auf.

Ports tunneln

SSH macht es möglich einen Tunnel für bestimmte Ports aufzubauen. Dies ist z.B. nützlich, wenn man sich zu einem Rechner verbinden möchte, der in einem fremden LAN steht. Einen weiteren Einsatzzweck hab ich in einem anderen Blogpost beschrieben.

ssh -N -L2001:server-im-lan:80 user@gateway-server

Dies leitet den lokalen Port 2001 auf den Port 80 von server-im-lan um. Man kann nun durch Eingabe von http://localhost:2001/ im Browser vollkommen transparent auf den Server zugreifen, der in einem fremden LAN steht. Der gesamte Traffic wird dabei über den gateway-server getunnelt. Der Parameter -N sorgt dafür, dass keine Shell geöffnet wird. Wenn man mehrere Ports weiterleiten will, kann man den Parameter -L mit allem was dazu gehört auch mehrmals benutzen.

Wenn man eine Weiterleitung regelmäßig benötigt, lohnt es sich einen Alias in der ssh_config-Datei anzulegen. Bezogen auf obriges Beispiel würde es dann so aussehen:

Host tunnel
  HostName gateway-server
  User user
  LocalForward localhost:2001 server-im-lan:80

Die Verbindung kann dann mit einem einfachen ssh tunnel aufgebaut werden.

Dateisystem über SSH mounten

SSH bietet die Möglichkeit mittels SFTP direkt auf das Dateisystem des Servers zuzugreifen. Dazu sind keine zusätzlichen Voraussetzungen auf der Server-Seite notwendig. Auf der Client-Seite muss das Programm sshfs installiert werden:

apt-get install sshfs

Nun kann man sehr einfach ein Verzeichnis auf dem Server lokal mounten:

sshfs user@server:/remote/pfad/ /lokaler/mountpoint/

Zum unmounten dient der Befehl:

fusermount -u /lokaler/mountpoint/

eingefrorene SSH-Shell beenden

Wenn eine SSH-Shell hängt und nicht mehr auf Eingaben reagiert, lässt sie sich mit einem Enter gefolgt von ~. beenden. Weitere Escape-Sequenzen zeigt ~? an.

Quellen

Festplatten-Benchmarks mit Bonnie++

Um die Geschwindigkeit einer Festplatte zu bestimmen, gibt es unter Linux verschiedene Tools.

hdparm

Für einen einfachen Test reicht das vorinstallierte hdparm völlig aus. hdparm -tT /dev/sda gibt beispielsweise die Lesegeschwindigkeit der ersten Festplatte aus. Allerdings kann hdparm nur die Lesegeschwindigkeit bestimmen und es wird nur die Geschwindigkeit der nackten Platte (unter Umgehung des Dateisystems) gemessen.

bonnie++

Für einen Test unter realistischen Bedingungen ist daher ein anderes Tool nötig. Das Linux-Standardtool dafür ist bonnie++. Da es bei den meisten Distributionen in den Repositories enthalten ist, gestaltet sich die Installation sehr einfach:

apt-get install bonnie++

bonnie++ führt zwei Testverfahren durch. Zuerst wird eine große Datei angelegt (in der Standardeinstellung doppelt so groß wie der Arbeitsspeicher), danach werden viele kleine Dateien angelegt (in der Standardeinstellung 16.000).

Eine HTML-formatierte Ausgabe erhält man, wenn man bonnie++ mit

bonnie++ -d /pfad/zum/verzeichnis -u root -q | bon_csv2html > result.html

aufruft. Alle Dateien werden dabei in /pfad/zum/verzeichnis angelegt. Lässt man den Parameter -d weg, werden alle Dateien im aktuellen Verzeichnis angelegt. Das Ergebnis landet dann in der Datei result.html im aktuellen Verzeichnis.

Gerade bei langsamen Datenträgern kann der Test sehr lange dauern. Dann ist es notwendig die Testparameter anzupassen. Allerdings erlaubt es bonnie++ nicht, die Größe der Datei unter das doppelte des Arbeitsspeichers zu senken. Dies ist der Fall, da man sonst nur die Geschwindigkeit das Dateisystem-Caches messen würde und die Angabe der Lesegeschwindigkeit nicht stimmt. Mit einem kleinen Trick kann man bonnie++ aber dennoch zwingen nur eine kleine Datei zu schreiben:

bonnie++ -r 500M -s 1G -n 10 -d /pfad/zum/verzeichnis -u root -q | bon_csv2html > result.html

Der Parameter -r 500M gibt dabei an, dass bonnie++ von einer Arbeitsspeichergröße von 500MiB ausgehen soll. Dadurch ist es möglich die Größe der Testdatei mit -s 1G auf 1GiB zu senken. Die Lese-Werte sind dann allerdings nicht mehr zu gebrauchen. Mittels -n 10 wird eingestellt, dass bonnie++ nur 10.000 kleine Dateien anlegen soll.

Quellen

Umlaute auf englischer Tastatur

Vor kurzem hab ich mir eine Tastatur mit UK-Layout gekauft. Zum Programmieren eignet sich das Layout ausgezeichnet, nur das Fehlen der Umlaute ist ziemlich störend. Aber Linux wäre nicht Linux, wenn man das Problem nicht mit einfachen Mitteln beheben könnte ;-)

xmodmap

Alles was man tun muss, ist im Home-Verzeichnis eine Datei mit dem Namen .Xmodmap anzulegen. In diese Datei kommt dann folgendes:

keycode 30 = u U u U udiaeresis Udiaeresis
keycode 32 = o O o O odiaeresis Odiaeresis
keycode 38 = a A a A adiaeresis Adiaeresis

Aus einem mir unerklärlichen Grund, muss ich bei mir die ersten beiden Spalten doppelt angeben. Unter Umständen funktioniert bei euch also folgendes:

keycode 30 = u U udiaeresis Udiaeresis
keycode 32 = o O odiaeresis Odiaeresis
keycode 38 = a A adiaeresis Adiaeresis

Die Änderungen werden übernommen, sobald man sich ab- und wieder angemeldet hat. Alternativ kann man auch xmodmap .Xmodmap in der Konsole aufrufen.

Klammern tauschen

In diesem Zusammenhang hab ich auch gleich die eckigen Klammern [] und die normalen Klammern () getauscht, weil ich die normalen Klammern viel häufiger benötige.

keycode 18 = 9 bracketleft 9 bracketleft bracketright plusminus
keycode 19 = 0 bracketright 0 bracketright braceright degree
keycode 34 = parenleft braceleft
keycode 35 = parenright braceright

Quellen

http://wiki.ubuntuusers.de/xmodmap

Offener GoogleSharing-Proxy

Über GoogleSharing hab ich hier ja schon etwas geschrieben.

Leider neigt der offizielle (voreingestellte) Proxy dazu auszufallen. Daher hab ich mich dazu entschieden, einen eigenen Proxy aufzusetzen. Die Installation ist ziemlich einfach, wenn man sich an diese Anleitung hält.

Da es nicht viel Sinn macht, einen Proxy alleine zu benutzen, kann gerne jeder meinen Proxy mitbenutzen.
Die Zugangsdaten:

Host: schaeufele.org
HTTP Port:1080
SSL Port: 1443

Dynamisches Spaltenlayout

Wenn man bei großen Bildschirmen die komplette Breite ausnutzen möchte, dann sollte man den Text mehrspaltig schreiben, denn lange Zeilen lassen sich sehr schlecht lesen. Glücklicherweise gibt es dafür Unterstützung in CSS3.

Auf kleinen Bildschirmen, werden diese Spalten dann aber sehr schmal, deshalb muss sich das Layout dynamisch an die Bildschirmbreite anpassen. Glücklicherweise gibt es auch dafür Unterstützung in CSS3 in Form von Media Queries.

Zusammengesetzt sieht das ganze dann so aus (Da es sich hierbei noch um keinen offiziellen Standard handelt, sind wieder verschiedene Versionen für die unterschiedlichen Browser nötig):

 1 @media (min-width: 1300px)
 2 {
 3   .entry
 4   {
 5     -moz-column-count: 2;
 6     -moz-column-gap: 40px;
 7     -moz-column-rule: 1px solid white;
 8     -webkit-column-count: 2;
 9     -webkit-column-gap: 40px;
10     -webkit-column-rule: 1px solid white;
11   }
12 }

Ruby-Dokumentation

Ich denke jedem sind diese Meldungen beim Installieren von Gems schon aufgefallen:

Installing ri documentation for haml-3.0.11...
Installing RDoc documentation for haml-3.0.11...

Was es damit auf sich hat, werde ich jetzt erklären.

RDoc

RDoc ist ein webbasiertes Betrachtungssystem für die Dokumentation.

Wenn man den Dokumentations-Server mittels gem server gestartet hat, kann man die Liste aller Gems unter der Internetadresse http://localhost:8808/ betrachten. Die Dokumentation einzelner Gems lässt sich dann mit einem Klick auf [rdoc] ansehen.

ri

ri ist ein konsolenbasiertes Zugriffstool (quasi man für Ruby).

Der Aufruf erfolgt mittels ri klasse oder ri funktion. Wenn der Funktionsname alleine nicht eindeutig ist, muss man ri klasse.funktion benutzen.

Beispiele:

$ ri link_to                                # Zugriff auf eine Funktion
$ ri ActionView::Helpers::UrlHelper.link_to # dasselbe wie oben
$ ri Fixnum                                 # Zugriff auf eine Klasse

Dokumentation deaktivieren

Da das Erstellen der Dokumentation viel Zeit in Anspruch nimmt, kann man das Erstellen auch deaktivieren, wenn man keine Dokumentation benötigt (z.B. auf dem Server).

Einmalig ist dies möglich, indem man gem --no-rdoc --no-ri install ... aufruft.

Für eine dauerhafte Lösung muss man die ~/.gemrc bzw. /root/.gemrc um folgende Zeile ergänzen:

gem: --no-rdoc --no-ri

Automatische Benachrichtigung bei Updates

Wer einen Debian-Server administriert, kennt das Problem vielleicht: Man muss regelmäßig nachgucken ob neue Updates vorliegen, die installiert werden können. Komplett automatisierte Updates sind auch nicht das Gelbe vom Ei, denn dabei kann immer etwas schief laufen…

Apticron hilft dabei dieses Problem zu lösen: Sobald Updates installierbar sind, bekommt man eine Mail, inkl. ausführlichem Changelog, zugeschickt.

Installation

Apticron lässt sich auf dem üblichen Weg installieren (apt-get install apticron).

Standardmäßig werden die Mails an den Benutzer root geschickt. Man sollte also darauf achten, entweder eine Weiterleitung auf den eigenen Mailaccount eingerichtet zu haben, oder einen Catch-All-Account zu benutzen. Alternativ lässt sich die Zieladresse auch mittels sudo dpkg-reconfigure apticron ändern. Weitere Optionen lassen sich in der Datei /etc/apticron/apticron.conf ändern.

Quellen

Piwik & HAML

Ich hab mich dazu entschieden, auf meinem Server auch Web Analytics-Software zu installieren. Da ich aber eine leichte Abneigung gegenüber Google hab, benutze ich das quelloffene Piwik. Ein weiterer Vorteil ist, dass alle Daten auf dem lokalen Server gespeichert werden und man so nicht fremden Anbietern vertrauen muss.

Installation

Zuerst muss Piwik runtergeladen und entpackt werden:

cd /var/www
wget http://piwik.org/latest.zip
unzip latest.zip
rm latest.zip
chmod 777 /var/www/piwik/tmp

Anschließend sollte man dann einen neuen Mysql-Benutzer und eine neue Datenbank anlegen. Mit phpMyAdmin geht das recht einfach.

Nun kann man den Installationsassistenten starten in dem man im Browser die Webseite http://example.com/piwik/ aufruft. Die einzelnen Schritte sollten eigentlich selbsterklärend sein.

HAML

Wenn man seine Webseite mit HAML geschrieben hat, ist das Code-Snippet zum Einfügen nicht sehr hilfreich. Deshalb hab ich eine auf HAML angepasste Version geschrieben. Folgender Quelltext muss an das Ende der Datei app/views/layouts/application.html.haml gehängt werden:

 1     / Piwik
 2     %script{:type => "text/javascript", :src => "#{request.protocol}schaeufele.org/piwik/piwik.js"}
 3     :javascript
 4       try {
 5         var piwikTracker = Piwik.getTracker("#{request.protocol}schaeufele.org/piwik/piwik.php", 1);
 6         piwikTracker.trackPageView();
 7         piwikTracker.enableLinkTracking();
 8       } catch( err ) {}
 9     / End Piwik Tag

Der Name der Seite muss natürlich noch angepasst werden.

Auf den <noscript>-Tag hab ich verzichtet, um Besuchern zu ermöglichen die Überwachung mit NoScript zu umgehen.

Firefox mit schwarzem Desktop-Theme

Wenn man ein schwarzes Desktop-Theme benutzt, zeigt Firefox die Seiten standardmäßig mit weißer Schrift auf schwarzem Hintergrund an. Das wird dann zum Problem, wenn eine Webseite den Hintergrund auf weiß setzt, aber die Schriftfarbe unverändert lässt, denn dann hat man weiße Schrift auf weißem Grund…

Der Workaround

Um das Problem zu lösen, hab ich mir ein kleines Greasemonkey-Skript gebastelt.

Zuerst muss man das Greasemonkey Firefox-Addon installieren und FF neustarten. Dann klickt man auf diesen Link und es sollte sich ein Popup öffnen, in dem die Installation bestätigen muss. Von nun an, sollten die Probleme der Vergangenheit angehören…

Auf manchen Seiten funktioniert es noch nicht ganz hundertprozentig, aber auf den meisten Seiten funktioniert es wunderbar.

Sollte es eine bessere Lösung geben, bitte ich um einen Kommentar ;-)

Die Funktionsweise

Das Skript überprüft, ob explizit ein Wert für Hintergrund und Vordergrundfarbe gesetzt wurde. Ist das nicht der Fall, wird der Hintergrund auf weiß bzw. der Vordergrund auf schwarz gesetzt. Das gleiche passiert dann noch mit Buttons und Texteingabefeldern.

Beim Erkennen, ob schon ein Wert gesetzt ist, hab ich mich bei diesem Skript bedient.

Spiele für Linux

Bislang wurde das Thema Spiele für Linux von den Spieleherstellern eher stiefmütterlich behandelt und man musste meist auf Wine ausweichen. Glücklicherweise haben die Indie-Produzenten jetzt aber erkannt, dass sich mit Spielen für Linux sehr wohl Geld machen lässt ;-)

Humble Indie Bundle

Beim Humble Indie Bumble handelt es sich um eine Pay-What-You-Want-Aktion. Mit anderen Worten: Man bekommt 6 Spiele für einen Preis, den man selbst festlegt.
Folgende Spiele sind in dem Bundle enthalten:

Ich hab gleich mal zugeschlagen und mir das ganze Bundle für 10$ gekauft.

Die meisten Spiele hab ich noch nicht installiert, aber vermutlich werd ich dem einen oder anderen Spiel noch einen eigenen Artikel widmen.

Leider ist die Aktion inzwischen beendet.
Allerdings wurde entschieden, den Quelltext von vier der Spiele zu veröffentlichen, nachdem die Spielehersteller mit dieser Aktion 1,2 Millionen Dollar eingenommen haben.

Osmos

Ein anderes sehr interessantes Spiel für Linux ist Osmos. Auch dieses Spiel lässt sich online kaufen für nur 10$.

Spielziel ist mit einem Einzeller andere (kleinere) Einzeller zu absorbieren und so zum größten Organismus zu werden. Um sich fortzubewegen muss man einen Teil seiner Masse abstoßen und beschleunigt so (laut Impulserhaltungssatz). Die anderen Einzeller treiben nur dumm herum, allerdings muss man aufpassen, dass man nicht von einem größeren Organismus absorbiert wird. In späteren Leveln, kommen dann noch andere intelligente Einzeller dazu, die einem das Leben schwer machen. Außerdem gibt es Level, in denen man um ein Gravitationszentrum kreist und durch vorsichtige Bewegungen seine Umlaufbahn ändern muss.

Der Schwierigkeitsgrad der Level geht von sehr entspannt, bis extrem schwierig, allerdings kann man die Level jeweils mit zufälligen Startaufstellungen nochmal spielen, so kommt keine Langeweile auf.

Die Grafik ist sehr minimalistisch gehalten, sieht aber sehr schön aus. Im Hintergrund läuft sehr schöne und wunderbar passende Ambient-Elektro-Musik.

Insgesamt ergibt das ein Spiel, das man sich unbedingt kaufen sollte ;-)

Brauchbare Google-Anonymisierung

Bisher hatten alle Google-Alternativen aus meiner Sicht entweder das Problem, dass sie schlecht zu bedienen sind oder schlechte Suchergebnisse liefern. Nun gibt es eine sehr brauchbare Lösung von Moxie Marlinspike

Das Prinzip hinter GoogleSharing ist, dass die Suchanfragen vieler User über einen Proxy geleitet werden und sich dort “vermischen”.

Installation

Einfach das Firefox-Addon installieren.
Außerdem muss beachtet werden, dass nur noch google.com verwendet werden darf und keine länderspezifischen Domains. Die Sprache lässt sich aber in den Einstellungen ändern.

Wenn alles funktioniert hat, sollte der Text in der Statusleiste beim Aufrufen einer Seite kurz hellgrün blinken…

Quellen

Öffnungszeiten beim Onlinebanking

Ja, ihr habt richtig gelesen. Als ich nachts auf das Online-Banking meiner Bank zugreifen wollte, wurde ich von folgender Meldung begrüßt:

Online-Banking nachts

3D-Effekt für Buttons mit CSS3

Wie versprochen kommt heute der erste Artikel zum Thema CSS3.

Ich werde erklären, wie man einen 3D-Effekt bei Buttons erzeugt, wie ich ihn bei den Navigationslinks auf meinem Blog verwende.

Dafür gibt es einen einfachen Trick: Ein einfacher Farbverlauf von hell nach dunkel, in Kombination mit abgerundeten Ecken, erzeugt einen relativ plastischen Effekt.

Nun zur Umsetzung:

HTML-Code

1 <a href="http://example.com" class="button" >Button</a>

Mehr ist nicht nötig, der Rest wird nur mit CSS gemacht.

CSS-Code

 1 a.button
 2 {
 3   display: inline-block;
 4   width: 100px;
 5   text-align: center;
 6   -moz-border-radius: 5px;
 7   -webkit-border-radius: 5px;
 8   border-radius: 5px;
 9   border: 1px solid #606060;
10   background-image: -moz-linear-gradient(top, #707070, #404040);
11   background-image: -webkit-gradient(linear, left top, left bottom, from(#707070), to(#404040));
12   background-color: #505050;
13   color: #DDDDDD;
14 }
15 a.button:hover
16 {
17   background-image: -moz-linear-gradient(top, #404040, #707070);
18   background-image: -webkit-gradient(linear, left top, left bottom, from(#404040), to(#707070));
19   background-color: #707070;
20 }

Erläuterungen

Zeilen 3-5

Wenn man mehrere Buttons nebeneinander verwendet, sieht es besser aus, wenn alle Buttons die gleiche Breite haben und der Text zentriert ist. Leider ist dies nicht ohne weiteres möglich:

Bei dem <a>-Element handelt es sich um ein inline-Element. Das Ändern der Breite ist bei inline-Elementen nicht möglich. Deshalb muss das <a>-Element als inline-block-Element umdefiniert werden. Dadurch bekommt man alle Möglichkeiten eines block-Elements an die Hand, mehrere Buttons können aber dennoch in einer Zeile dargestellt werden.

Zeilen 6-8

Hier werden die runden Ecken definiert, in 3 verschiedenen Versionen für verschiedenen Browser.

Zeilen 10-12

Hier wird der Farbverlauf definiert. Leider ist die Syntax von Firefox und Webkit komplett inkompatibel, deswegen sind 2 völlig verschiedene Versionen nötig. Um Benutzer von Browsern ohne Farbverlaufs-Unterstützung nicht im Regen stehen zu lassen, wird auch noch eine einfache Hintergrundfarbe als Fallback definiert.

Ergebnis

Um die Beispiele angucken zu können, ein aktueller Browser nötig (Firefox 3.6, Safari 4.0 oder Chrome 4.0)

Button

Das ganze lässt sich auch beliebig abwandeln:

Button

Tor auf dem Server

Zuerst mal zur Problematik: Tor ist eine einfache und effektive Möglichkeit, anonym im Internet zu surfen. Es gibt aber 2 Probleme: die Geschwindigkeit lässt sehr zu wünschen übrig und wenn man an einem fremden Rechner sitzt, kann man Tor nicht installieren.
Die Lösung ist, dass man Tor auf einem Server installiert und dann mit Hilfe eines SSH-Tunnels auf Tor zugreift.
Da ein Server üblicherweise über eine Verbindung mit geringer Latenz angebunden ist, beträgt die Verzögerung beim Seitenaufbau in der Regel weniger als eine Sekunde.

Wenn man Tor auf dem Server installiert hat, kann man auch die Gelegenheit nutzen um das Tor-Projekt zu unterstützen. Da die Installation als normaler Relay-Node eine recht hohe Bandbreite und Rechenleistung voraussetzt empfehle ich die Installation im Bridge-Modus. Die Bridges sind nicht in der Liste der Tor-Knoten enthalten, die man vom Server abrufen kann, deshalb ist es nicht möglich alle Bridges zu zensieren. Damit hilft man also vor allem Benutzern aus Ländern mit Internet-Zensur. Der Bandbreitenverbrauch liegt dabei typischerweise unter 100MB am Tag und der Server leitet auch keine Verbindungen weiter, die das Tor-Netzwerk verlassen, so sind rechtliche Probleme ausgeschlossen…

Die folgende Anleitung bezieht sich auf Debian (und Derivate)…

Auf dem Server:

Zuerst müssen tor und privoxy auf dem Server installiert werden:

apt-get install tor privoxy

Dann muss die Datei /etc/tor/torrc für den normalen Betrieb um folgende Zeilen ergänzt werden:

SocksPort 9050
SocksListenAddress 127.0.0.1

Soll tor zusätzlich noch im Bridge-Modus laufen müssen folgende Zeilen auch noch ergänzt werden:

ORPort 8080
BridgeRelay 1
Exitpolicy reject *:*

In der Datei /etc/privoxy/config muss folgendes hinten angefügt werden (den Punkt am Ende nicht vergessen):

forward-socks4a / 127.0.0.1:9050 .

Danach muss beides neu gestartet werden:

/etc/init.d/tor restart
/etc/init.d/privoxy restart

Auf dem Client:

Für eine einmalige Verbindung reicht folgender Befehl aus:

ssh -L 6677:localhost:8118 max.mustermann@example.com

Wenn man Tor häufiger benutzen möchte, lohnt es sich einen SSH-Alias anzulegen. Dazu muss in der Datei ~/.ssh/config folgendes eingetragen werden:

Host tor
  HostName example.com
  User max.mustermann
  LocalForward localhost:6677 localhost:8118

Nun kann das Port-Forwarding mit ssh tor gestartet werden (das muss bei jedem Start erfolgen)

Windows-Nutzer müssen entsprechend Putty benutzen um den SSH-Tunnel herzustellen. Bei Gelegenheit werd ich nochmal eine Anleitung für Putty schreiben.

Dann kann man im Browser als HTTP-Proxy localhost:6677 einstellen.

Von nun an sollte man mit tor im Internet surfen. Um zu Überprüfen ob man wirklich Tor benutzt, kann man auf die Seite https://check.torproject.org/ gehen…

Quellen:

Sitemap für Enki

Um meinen Blog für Google besser durchsuchbar zu machen (Stichwort Suchmaschinenoptimierung ), hab ich beschlossen eine Sitemap zu basteln.

Eine Sitemap ist eine XML-Datei die alle (zu indizierenden) Seiten der Webseite mit zusätzlichen Informationen wie dem Änderungsdatum enthält.

Es gibt Programme die eine Webseite automatisiert durchsuchen und eine Sitemap erstellen, aber solche Tools halte ich nur für eine Notlösung: Es werden alle Seiten in die Sitemap aufgenommen (also auch Übersichtsseiten) und diese Tools können das Änderungsdatum der Seiten nicht erfassen und somit muss Google bei jedem Besuch die komplette Seite neu durchsuchen.

Es muss also eine eigene Lösung her:

Ich hab die Sitemap-Action im Post-Controller angesiedelt.
Der Controller-Code hat keine andere Aufgabe, als alle Posts und Pages aus der Datenbank zu holen und den entsprechenden View aufzurufen:

app/controllers/posts_controllers.rb

1   def sitemap
2     @posts = Post.all
3     @pages = Page.all
4     render :action => "sitemap.xml.builder", :layout => false
5   end

Die View ist etwas umfangreicher, sollte aber leicht verständlich sein, wenn man sich die offizielle Spezifikation anguckt.

app/views/posts/sitemap.xml.builder

 1 xml.instruct!
 2 
 3 xml.urlset "xmlns" => "http://www.google.com/schemas/sitemap/0.84" do
 4   @posts.each do |post|
 5     xml.url do
 6       xml.loc post_path(post, :only_path => false)
 7       xml.lastmod post.lastmod.iso8601
 8     end
 9   end
10 
11   @pages.each do |page|
12     xml.url do
13       xml.loc "http://#{request.host_with_port}/pages/#{page.slug}"
14       xml.lastmod page.updated_at.iso8601
15     end
16   end
17 end

Nun muss noch die entsprechende Route hinzugefügt werden:

config/routes.rb

1 map.sitemap '/sitemap.xml', :controller => "posts", :action => "sitemap"

Die lastmod-Funktion im Post-Model gibt entweder die letzte Modifikation des Posts oder des letzten Kommentars zurück.

app/models/post.rb

1   def lastmod
2     if self.approved_comments.count == 0 || self.approved_comments.last.updated_at < self.updated_at
3       return self.updated_at
4     end
5     self.approved_comments.last.updated_at
6   end

Nun muss die Sitemap nur noch in die robots.txt eingetragen werden, damit sie auch von Google gefunden wird.

public/robots.txt

1 Sitemap: http://blog.schaeufele.org/sitemap.xml

Fertig ist die Sitemap…