Putty reagiert nicht mehr auf Tastatur-Eingaben

Das Putty-Fenster ist vermeintlich eingefroren und reagiert auf keinerlei TastaturEingaben? Bisher hast Du Dir nur damit helfen können die Verbindung zu beenden und erneut herzustellen?

Das Problem ist relativ schnell erklärt und behoben.

Gerade Entwickler die auf einer grafischen Oberfläche – restriktive Windows – unterwegs sind haben sich einen ganz bestimmten Reflex angewöhnt: Beim Bearbeiten von Textdateien regelmäßig STRG+S zu tätigen um Änderungen an selbigen in einem beliebigen Editor zu speichern.

Diese Handlung führt allerdings auf einer Putty-Konsole zu einer bestimmten Aktion, nämlich dass die Konsole in den XOFF-Modus versetzt wird. Dies bedeutet, dass keine weiteren Ausgaben mehr angezeigt werden und – auch nicht die vom Bediener selbst getätigten. So hat man vermeintlich das Gefühl Putty sei eingefroren oder der Server reagiere nicht mehr. Dies aber ist nicht der Fall.

Wie konnte das nur passieren?

Entweder war der Fokus ungewollt im Putty als man diese Aktion in einem anderen Programm absetzen wollte oder man hat fälschlicherweise im vi oder vim STRG+S gedrückt um Änderungen an einer Datei zu speichern. Dies hat sodann diesen Modus aktiviert.

Lösung

Um den XOFF Modus zu deaktiveren drückt man einfach die Tastenkombination STRG+Q.

Möchte man dies dauerhaft lösen so kann man diesen Modus pauschal deaktivieren. Ich selber habe dies nicht getan, wer aber danach auf der Suche ist kann hierfür folgende beiden Zeilen in die .bashrc eintragen:

stty ixany
stty ixoff -ixon

Shortcut für Linux-Konsole um Fenster zu leeren

Ich möchte in meiner Linux Konsole alle Ausgaben in meinem aktuellen Fenster leeren. Dies geht mittels dem Befehl

clear

Unter Windows lautet der Befehl hierfür:

cls

Man kann es jedoch auch viel einfacher haben und dafür die Tastenkombination

STRG + L

verwenden ohne diesen langen Befehl einzutippen und ihn dann noch mit Enter zu bestätigen.

telnet Verbindung lässt sich nicht beenden

Wenn ich mich via telnet auf einen beliebigen Server verbinde kann ich die Verbindung nicht mehr mittles STRG+C abbrechen und auch nicht mittels STRG+Q beenden.

Dies liegt an der Natur von telnet selber. Es wird erwartet, dass man das Kommandofenster startet. Beim Start wird man schließlich nicht weiter darauf hingewiesen:

[vader@deathstar]$ telnet blog.moderlak.de 80
Trying 88.99.14.229...
Connected to blog.moderlak.de.
Escape character is '^]'.

Lösung 

Man könnte nun hingehen und die SSH Sitzung killen oder auch den Timeout der Gegenstelle abwarten. Aber das ist ja kein ordentlicher Verbindungsabbau. Um nun in den Eingabemodus zu gelangen drückt man in der telnet Konsole die Tastenkombination STRG+“+“. Es öffnet sich umgehend die Eingabekonsole:

^]
telnet> 

Hier kann man nun beliebig Befehle absetzen die auf der Gegenstelle ausgeführt werden. Zum Beispiel den Beenden-Befehl:

telnet> quit
Connection closed.

Weitere Hilfe

In der telent Eingabekonsole kann man nun auch durch die Eingabe von help die Liste an Befehlen anfordern mit denen die Gegenstelle korrespondiert :

telnet> help
Commands may be abbreviated.  Commands are:

close           close current connection
logout          forcibly logout remote user and close the connection
display         display operating parameters
mode            try to enter line or character mode ('mode ?' for more)
open            connect to a site
quit            exit telnet
send            transmit special characters ('send ?' for more)
set             set operating parameters ('set ?' for more)
unset           unset operating parameters ('unset ?' for more)
status          print status information
toggle          toggle operating parameters ('toggle ?' for more)
slc             change state of special charaters ('slc ?' for more)
z               suspend telnet
!               invoke a subshell
environ         change environment variables ('environ ?' for more)
?               print help information

telnet>

Weiterführende Literatur

git remote URL von SSH auf HTTPS ändern

Ich habe auf meinem GIT Server mehrere Authenifizierungsmöglichkeiten zur Verfügung stehen. Man kann sich auf diesem via HTTP, respektive HTTPS authentifzieren und alternativ ist dies auch über SSH möglich.

Nachdem das Repository einmal mittels HTTPS ausgecheckt wurde und man sich für jede serverbasierte Aktion andauernd mit dem Zugangspasswort authentifizieren muss, möchte ich die wiederholte Passworteingabe unterbinden. Dies kann man indem man die Repositoryquelle auf SSH umstellt.

Die bisherige HTTPS-URL hierfür lautet:

https://vader@nullgit.deathstar.universe/scm/my_project/my_repository.git

Die neue SSH-URL ist erreichbar unter:

ssh://git@nullgit.deathstar.universe:7999/my_project/my_repository.git

Man kann die Bezugsquelle des Repository ändern durch folgenden Befehl:

git remote set-url origin ssh://git@nullgit.deathstar.universe:7999/my_project/my_repository.git

Um die Einstellung zur geänderten URL zu verifizieren kann man diese mittels folgender Abfrage verifizieren:

git remote -v

Hieraus sollte folgende Ausgabe resultieren:

origin ssh://git@nullgit.deathstar.universe:7999/my_project/my_repository.git (fetch)
origin ssh://git@nullgit.deathstar.universe:7999/my_project/my_repository.git (push)

Das ganze läuft bei mir auf meinem Bitbucket-Server und lässt sich einwandfrei einrichten. Es lässt sich auf dem selben Weg auch die Quelle umkehren um auf von SSH auf HTTPS umzustellen.

git remote set-url origin https://vader@nullgit.deathstar.universe/scm/my_project/my_repository.git

Mit dieser Funktionalität kann man natürlich auch sein Repository auch auf einen anderen Quellserver umstellen. Wer sich jetzt nicht vorstellen kann wie das funktioniert der schreibt mir einfach in die Kommentare.

Weiterführende Literatur

Suche nach Inhalten in bestimmten Dateien

Durchsuche rekursiv nach Dateien in einem Verzeichnis nach Inhalten ohne Beachtung der Groß- und Kleinschreibung:

find /var/log/httpd/ type f | xargs grep -iE "cron\.php"

Zunächst suchen wir mittels find all die Dateien die für eine genauere Analyse überhaupt relevant sind. Im zweiten Schritt wird mittels grep in genau diesen Dateien nach dem gewünschten Inhalten gesucht ungeachtet von Groß- und Kleinschreibung

Linux: Suche in eingeschränkten Suchergebnis

Ich bin auf der Suche nach bestimmten Inhalten einer Datei. Jedoch sind diese Dateien in einem Verzeichnis mit Unterverzeichnissen enthalten in welcher noch viele weitere Dateien enthalten sind. Diese möchte ich jedoch aus Zeit- und Performancegründen nicht durchsuchen.

Um im ersten Schritt die betroffenen Dateien zu ermitteln nehme ich mir den Linux Befehl find zuhilfe:

vader@deathstar:~# find /var/log/apache2/ -iname "*access*.log"

Um nun in den Inhalten der Dateien zu suchen hilft mir der Befehl grep: 

vader@deathstar:~# grep "bing" /var/log/apache2/access.log

Um diese beiden Befehle nun zu verknüpfen und aus allen in find resultierenden Dateien zu finden steht das Programm xargs zur Verfügung:

vader@deathstar:~# find /var/log/apache2/ -iname "*access*.log" | xargs grep "bing"

Virentestsignatur

Ich möchte gerne testen ob mein Virenscanner unter Linux funktioniert, sowie darauf aufbauende Aktionen auch erfolgreich ausgeführt werden. Dafür benötige ich ein Testfile ohne einen echten Virus in meinem System vorzuhalten.

Dafür haben die Virenscanhersteller die Eicar-Test-Signature in ihre Scans mit aufgenommen. Diese kann man dann als Datei in seine Prüfungen mit aufnehmen.

Erzeuge hierfür eine Datei mit folgendem Inhalt:

X5O!P%@AP[4\PZX54
(P^)7CC)7}
$EICAR-STANDARD-ANTIVIRUS-TEST-FILE
!$H+H*

Damit nun weder Dein, noch mein Virenscanner auf diese Eingabezeichen unangenehm reagiert habe ich die hier aufgeführte Kennung minimal chiffriert. Kopiere die aufgeführten Zeilen und entferne alle Zeilenumbrüche, so dass alle Zeichen in einer Zeile stehen und schreibe diese in eine eigene Datei. Damit steht dann die Testsignatur bereit und kann getestet werden.

Unterschiede der SQL Datenbank nach beliebiger Operation betrachten

Ich möchte in einer mir unbekannten MySQL Datenbank Veränderungen nach einer bestimmten Operation beobachten ohne diese im Detail zu kennen und auch nicht den Programmfluss zu debuggen oder SQL INSERTs oder UPDATEs nachzuverfolgen.

Dafür werde ich in vier Schritten vorgehen. Zunächst wird ein Dump des Datenbestandes vorgenommen:

mysqldump my_db > vorher.sql

Dann wird als zweites die Operation durchgeführt. Dies kann ein Skriptstart oder auch z.B. ein Seitenabruf oder Formularversand sein.

Danach wird erneut ein Dump in eine zweite Datei geschrieben:

mysqldump my_db > nachher.sql

Zu guter letzt werden nun diese beiden Dateien miteinander verglichen.

diff -I RE vorher.sql nachher.sql

Es werden hiermit nur die Veränderungen aufgezeigt, die auch tatsächlich angefallen sind, die man nun mit einem guten Editor wie z.B. dem Notepad++ gut untersuchen kann.

Es sollte natürlich sichergestellt werden, dass keinerlei andere Prozesse den Datenbestand verändern um das Ergebnis nicht zu verfälschen.

Offene Ports auf Remotesystem ermitteln

Ich möchte mittels Linux offene Ports auf einem Remotesystem ermitteln. Dafür bietet Linux von Haus aus nmap an.

vader@deathstar:~$ nmap -A 127.0.0.1 -p 80
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000071s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
|_http-title: 403 Forbidden

Um mehrere Ports zu ermitteln kann man auch eine Bereich von Ports auswählen:

vader@deathstar:~$ nmap -A 127.0.0.1 -p 80-90

Wir die Liste länger als 25 Elemente so wird das Ergebnis der gleichen Ports gruppiert und nur die vermeintlich relevanten Ports aufgelistet:

Nmap scan report for localhost (127.0.0.1)
Host is up (0.00027s latency).
Not shown: 26 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
|_http-title: 403 Forbidden
110/tcp open pop3 Dovecot pop3d
|_pop3-capabilities: USER CAPA TOP AUTH-RESP-CODE PIPELINING STLS UIDL SASL(PLAIN LOGIN) RESP-CODES
Nmap done: 1 IP address (1 host up) scanned in 6.32 seconds