Archives For SSH

camera Weekly Snap: Git Flow & GeoIP, Rsync & SCP1 – 5 April kicked off the month with tips for flowing Git branches, SSH transmission speed, clean website code and request redirection.

Eva began by counting 16 days to the OSDC with Benedikt Stockebrand’s presentation “Like Rats on a Sinking Ship” on the end of IPv4.

Stefan then shared his trick to boost SSH transmission speed with SCP and Rsync parameters while Bernd gave us his to redirect requests from specific countries.

To end the week, Eric explained the right flow for Git branching, and Tobias reminded us that clean website code matters to Google page ranks.

20.thumbnail Weekly Snap: Git Flow & GeoIP, Rsync & SCP

Autor: Amanda Mailer

Amanda unterstützt das NETWAYS Team im Bereich Marketing und da vor allem bei allen englischen Aktivitäten. Als Australierin mit einem deutschen Mann verheiratet, fällt ihr das auch besonders leicht. Neben NETWAYS arbeitet sie auch im Icinga Team mit.

speedy 300x175 SCP und Rsync Boost Parameter

Wer kennt es nicht: Es muss schnell etwas per scp oder rsync aus dem Backup oder einem LVM Snapshot auf einen anderen Server im internen Netz kopiert werden, weil gerade zur ungünstigsten Zeit z.B. eine Datenbank nicht korrigierbar ausgefallen ist.

Da die dabei anfallenden Datenvolumen heuzutage wohl eher beständig mehr als weniger werden, ist jedes bisschen Übertragungs-Speed, das man aus der Leitung kitzeln kann, sehr wichtig.

Was gerne übersehen wird: SSH bietet da zumindest einen Parameter an, mit dem man die Geschwindigkeit ordentlich nach oben schrauben kann durch die Wahl eines anderen Cypher Algorithmus, auch über rsync.

Das ganze bringt satte rund 30% mehr an Daten über die Leitung und spart dadurch natürlich auch entsprechend viel Zeit beim Kopieren.

Als Beispiel ein rsync Befehl, den ich in so einem Fall immer verwende:


rsync -aPHxz --delete -e 'ssh -c arcfour' root@:/foo/bar/* /foo/bar/

Wem das immer noch nicht reicht, der kann zusätzlich auch noch einen anderen ‘message authentication code’ angeben über den Parameter: ‘-m hmac-md5-96″

12.thumbnail SCP und Rsync Boost Parameter

Autor: Stefan Gundel

Stefan ist ein Urgestein bei NETWAYS und arbeitet im Managed Services Team. Der internationale Durchbruch gelang Stefan als Fotomodel für den K+K Warenkorb. Nachdem er einige Jahre exklusiv für unseren Kunden StayFriends gearbeitet hat, darf er nun endlich auch wieder in anderen Projekten mitarbeiten.

Jahrelalang habe ich ssh, wie wahrscheinlich die meisten von uns, nur zum administrieren und direkten Zugriff auf entfernte Server benutzt. Ab und zu vielleicht nochmal scp aber dann war’s das auch wirklich.
In den letzten Monaten habe ich aber so viele coole Funktionen von ssh kennengelernt, dass ich die hier jetzt nochmal sammeln möchte um nicht alles in der nächsten Woche wieder vergessen zu haben.

Authentifizierung

Ein Feature, das die tägliche Arbeit sehr erleichtert ist das authorized_keys file in ~/.ssh
Hier trägt man einfach den public key des users ein der sich auf diesen Host verbinden darf und alle Passworteingaben haben sich erstmal erledigt.

Portweiterleitung

Man kann ssh nicht nur für die direkte Kommunikation auf eine remote shell benutzen sondern alle Möglichen Dienste durch ssh tunneln und so Firewallgrenzen überspringen und sich die Arbeit erleichtern.

Ich benutze als Beispiel mal einen Webserver, der auf einem entfernten Host läuft und nur über einen weiteren Hop erreichbar ist. Die Firewall im Bild lässt bloß Port 22 auf HostA zu.

ssh blog 300x180 Wunderwelt ssh

ssh environment

Beispiel 1: Zugriff von HomeLaptop auf auf webserver.

Um dieses Szenarion zu realisieren kann man z.B. den Port 80 des webservers über HostA durch den ssh tunnel auf den lokalen Port 8080 des HomeLaptops weiterleiten.

Hierbei hat man zwei Möglichkeiten. Entweder man baut 2 Tunnel hintereinander, oder man sagt ssh wie es von LaptopHome zum webserver kommt.

1
2
3
4
5
# als erstes einen tunnel vom webserver zum HostA
user@LaptopHome:# ssh kalle@HostA
user@HostA:# ssh -L 8080:127.0.0.1:80 manfred@webserver
# als nöchstes in einem anderen terminal
user@LaptopHome:# ssh -L 8080:127.0.0.1:8080 user@HostA

Die Alternative finde ich persönlich viel schöner.
Man öffnet auf LaptopHome die ~/.ssh/config Datei und trägt folgenden Zeilen ein.

1
2
3
4
5
6
7
8
9
10
Host HostA
   User Kalle
   Hostname HostA
 
Host webserver
   User manfred
   # mit -a bewirkt dass der public key des gateway hosts auf dem Zielsystem sein muss
   ProxyCommand ssh -x -a -q HostA nc %h 22
   # kein -a bewirkt, dass der public key des initiierenden users auf dem Zielsystem sein muss
   ProxyCommand ssh -x -q HostA nc %h 22

Am Ende kann man mit einem kurzen Befehl den Tunnel aufbauen

1
user@LaptopHome:# ssh -L 8080:127.0.0.1:80 webserver

Einen Wunsch könnte man im Zweifelsfall noch haben. Eventuell möchte man vom HomePC auch auf den webserverzugreifen. Jetzt könnte man natürlich die .ssh/config Datei um ein weiteres ProxyCommand erweitern. Es gibt jedoch noch eine andere Möglichkeit. Mit Hilfe der ssh option -g kann man den lokalen Port allgemein Verfügbar machen.

1
user@LaptopHome:# ssh -L 8080:127.0.0.1:80 webserver -g

Und schon kann von HomePC auf http://LaptopHome:8080 zugegriffen werden.

Beispiel 2: Den Kollegen auf der Arbeit den Datenbankserver zur Verfügung stellen.

Der Datenbankserver HomeDB stellt im LAN eine mysql Datenbank auf Port 3306 bereit.

1
user@HomeDB:# ssh kalle@HostA -R 10000:HomeDB:3306

Das führt dazu, dass auf der man auf der Arbeit auf HostA, Port 10000 der mysql Dienst zur Verfügung steht.

magical bash

Das ProxyCommand Beispiel bedient sich, um die direkte Weiterleitung sicherzustellen, des Linux tools netcat alias nc. Es soll allerdings in der großen weiten Welt Systeme geben, auf denen kein netcat existiert. Im Beispiel müsste dieses auf HostA installiert sein. Sollte es sich bei diesem jedoch z.B. um ein älteres Solaris oder AIX System handelt so könnte es auch sein, dass dem nicht so ist.

Möchte man jetzt aber trotzdem das ProxyCommand nutzen gibt es noch eine Möglichkeit mit Hilfe der /dev/tcp Schnittstelle, die einem von BASH bereitgestellt wird, ein netcat nachzubilden.

1
2
3
4
5
6
Host HostA
   User Kalle
   Hostname HostA
Host HostA
   User Manfred
   ProxyCommand ssh webserver "/bin/bash -c 'exec 3<>/dev/tcp/HostA/22; cat <&3 & cat >&3;kill $!'"

Sollte ich noch weitere ssh magic herausfinden werde ich nicht zögern euch diese mitzuteilen.

38.thumbnail Wunderwelt ssh

Autor: Christoph Niemann

Christoph hat bei uns im Bereich Managed Service begonnen und sich dort intensiv mit dem internen Monitoring auseinander gesetzt. Seit 2011 ist er nun im Consulting aktiv und unterstützt unsere Kunden vor Ort bei größeren Monitoring-Projekten und PERL-Developer-Hells.

camera Weekly Snap: Require.JS, Managing SSH Connections & Protocol Handlers in Firefox2 – 6 July featured the OSMC, Birger’s sabbatical and tips for developers and systems administrators.

Achim gave us his tips for managing SSH connections manually and Jannis recommended Require.JS as an efficient solution for organising code in JavaScript.

Dirk then showed how to integrate protocol handlers into Firefox, while Birger shared his first thoughts on his sabbatical and how he found Bulletproof Networks, his employer Down Under.

Eva counted 107 days down to the OSMC with Thomas Gelf’s presentation on “Monitoring at Large – the World is not Enough” and reflected on the whirlwind of emails, ticket reservations and preparations for the upcoming Puppet Camp and OSMC. She also encouraged OSMC guests to bring a companion along.

20.thumbnail Weekly Snap: Require.JS, Managing SSH Connections & Protocol Handlers in Firefox

Autor: Amanda Mailer

Amanda unterstützt das NETWAYS Team im Bereich Marketing und da vor allem bei allen englischen Aktivitäten. Als Australierin mit einem deutschen Mann verheiratet, fällt ihr das auch besonders leicht. Neben NETWAYS arbeitet sie auch im Icinga Team mit.

Eine der schnellsten und komfortabelsten Möglichkeiten auf ein problematisches System zuzugreifen ist für mich auf einen Link in der Überwachung zu klicken. Somit ist nur die Frage wie bekomme ich die Möglichkeit auf eine URL zu klicken und es öffnet sich meine SSH-Verbindung, mein VNC-Fenster oder die Remotedesktop-Sitzung?

Die Lösung hierfür heißt auf der einen Seite action_url (oder notes_url) in Nagios oder Icinga, auf der anderen Seite muss ich meinen Browser noch dazu bringen mit entsprechenden URLs umzugehen. Chrome reicht diese einfach an das System weiter, was gut funktioniert wie mir gesagt wurde. Der Internet Explorer und Firefox brauchen dagegen etwas Hilfe. Natürlich gibt es für beide Lösungen wie entsprechende Plugins, hier wäre für den IE der Putty-Fork Kitty oder für den Firefox das javascript-basierende Addon Firessh zu nennen.

Nun ja, ich arbeite am liebsten mit Firefox, einfach aus der Historie heraus, und ich nutze am liebsten meine gewohnten Werkzeuge, also ist alles vorherige schön und gut, aber nicht was ich will. Außerdem handelt es sich um keine allumfassende Möglichkeit, wenn ich noch weitere Protokolle einbinden will.

Daher möchte ich am Beispiel von ssh zeigen wie man entsprechende Protokoll-Handler in Firefox einbaut. Die Vorgehensweise funktioniert so ab Firefox 3.6:

  1. Erstellen eines Scripts zum Öffnen des Links
  2. Öffnen von about:config in Firefox und bestätigen der Sicherheitsabfrage
  3. Erstellen eines neuen Boolean network.protocol-handler.expose.ssh über Rechtsklick und zuweisen des Werts false
  4. Schließen von Firefox und erneutes öffnen (in aktuellen Versionen nicht mehr nötig)
  5. Öffnen eines SSH-Links wie ssh://user@host:port
  6. Auswählen des Skripts zum Öffnen der Links, Haken für Auswahl merken setzen!

Hiermit ist es möglich beliebige Protokolle einzubinden, nur die Verwendung von file:// und smb:// lässt Firefox aus Sicherheitsgründen nicht zu!

Und damit nun nicht jeder ein eigenes Skript basteln muss noch zwei Beispielskripte, die ich mir mal auf die schnelle gebastelt hatte.

Die URLs haben hierbei folgenden Aufbau:

  • ssh://user@host:port
  • telnet://user@host:port
  • rdesktop://user@host:port
  • vnc://host:display

Das erste Beispielskript ist für die Verwendung unter Linux mit Gnome gedacht und zerlegt die URL und baut daraus einen Connectionstring für ssh oder telnet, welches innerhalb eines neuen Gnome-Terminals ausgeführt wird, und startet auch rdesktop und vncviewer.

#!/bin/bash
protocol=$(echo $1 | cut -d : -f 1)
address=$(echo $1 | cut -d / -f 3)
user=$(echo $address | grep @ | cut -d @ -f 1)
port=$(echo $address | grep : | cut -d : -f 2)
host=$(echo $address | cut -d @ -f 2 | cut -d : -f 1)
case $protocol in
ssh)
connectstring=$(echo "$([ -z $user ] || echo "$user@")$host$([ -z $port ] || echo "-p $port")")
gnome-terminal --window -e "$protocol $connectstring"
;;
telnet)
connectstring=$(echo "$host $([ -z $port ] || echo "$port")$([ -z $user ] || echo "-l $user")")
gnome-terminal --window -e "$protocol $connectstring"
;;
rdesktop)
connectstring=$(echo "$([ -z $user ] || echo "-u $user ")$host$([ -z $port ] || echo ":$port")")
rdesktop -g 1280x960 $connectstring
;;
vnc)
connectstring=$(echo "$host$([ -z $port ] || echo":$port")")
vncviewer $connectstring
;;
esac

Mein Beispielskript für Windows ist weniger elegant und kann nicht mit Ports umgehen, dieses öffnet Putty für ssh und telnet bzw. Realvnc für vnc mit festem Pfad sowie mstsc für Remotedesktop.

@ECHO OFF
set parameter=%1%
echo %parameter% |findstr ssh:// &gt;nul:
if not errorlevel 1 GOTO SSH
echo %parameter% |findstr telnet:// &gt;nul:
if not errorlevel 1 GOTO TELNET
echo %parameter% |findstr rdesktop:// &gt;nul:
if not errorlevel 1 GOTO RDESKTOP
echo %parameter% |findstr vnc:// &gt;nul:
if not errorlevel 1 GOTO VNC
GOTO END</code>
 
:SSH
set host=%parameter:ssh://=%
START C:\Programme\PuTTY\putty.exe -ssh %host%
GOTO END
 
:TELNET
set host=%parameter:telnet://=%
START C:\Programme\PuTTY\putty.exe -telnet %host%
GOTO END
 
:RDESKTOP
set host=%parameter:rdesktop://=%
START %SystemRoot%\system32\mstsc.exe -v:%host%
GOTO END
 
:VNC
set host=%parameter:vnc://=%
START C:\Programme\RealVNC\VNC4\vncviewer.exe %host%
GOTO END
 
:END

Die Anwendung ist natürlich nicht nur auf Nagios bzw. Icinga beschränkt, auch Check_interfacetable_v3t integriert standardmäßig einen Link für den ssh- oder telnet-Zugriff auf das überwachte System, Mediawiki lässt es zu entsprechende URLs einzubauen und natürlich alle Software, die es erlaubt beliebige URLs anzugeben.

Ich hoffe der ein oder andere hat Verwendung hierfür und wünsche dann viel Spaß mit den nun noch schneller erreichten Systemen.

64.thumbnail Protokoll Handler in Firefox oder wie komm ich schnell zu meinen Problemen

Autor: Dirk Götz

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Nagios, Puppet und andere Systems Management Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich.

Page 1 of 212