Datei != Datei
- Urspruenglicher Autor: Ramon Kukla
- Urspruengliches Datum: 25.03.2011
Vor einigen Tage wollte ich, wie auch mal in Arbeit auf vielen Servern beschrieben, einige Server auf einen aktuellen Stand bringen. Also eine neue lokale Konsole auf und ein beherztes ramon@zak:~$ for i in $(< server); do ssh $i „sudo aptitude update && sudo aptitude safe-upgrade“; done
abgesetzt. Was erhalte ich als Meldung?
: Name or service not knownname srv-cgn-01
Ich gebe zu, ich war etwas verwundert, da in meiner ~/.ssh/config
ein Eintrag fuer eben diesen und acht andere Server zu finden ist. Um sicher zu gehen, dass alles klappt, versuche ich mich haendisch mit dem Server zu verbinden.
ramon@zak ~ $ ssh srv-cgn-01 Linux srv-cgn-01 2.6.32-30-server #59-Ubuntu SMP Tue Mar 1 22:46:09 UTC 2011 x86_64 GNU/Linux Ubuntu 10.04.2 LTS Welcome to the Ubuntu Server! * Documentation: http://www.ubuntu.com/server/doc System information as of Wed Mar 23 10:14:58 CET 2011 System load: 0.21 Processes: 143 Usage of /: 2.4% of 128.80GB Users logged in: 0 Memory usage: 7% IP address for eth0: 87.79.26.35 Swap usage: 0% IP address for eth1: 192.168.100.1 Temperature: 8 C Graph this data and manage this system at https://landscape.canonical.com/ 0 packages can be updated. 0 updates are security updates. Last login: Tue Mar 22 07:54:16 2011 from foo.ptlx.de ramon@zak
Klappte soweit. Jetzt wollte ich doch mal schauen, was mir hier mit einem echo angezeigt wird.
ramon@zak ~ $ for i in $(cat server_ptlx); do echo ssh $i ls; done ls srv-cgn-01 ls srv-cgn-02 ls srv-cgn-03 ls srv-cgn-04 ls srv-cgn-05 ls srv-cgn-06 ls srv-cgn-07 ls srv-cgn-08 ls srv-cgn-09 ramon@zak
Das war definitiv nicht die Ausgabe, die ich erwartet hatte. Viel mehr waere etwas wie ssh srv-cgn-01 ls
zu erwarten gewesen. Ich werde es nicht zu Spannend machen, moechte aber sagen, dass ich bei dem Problem sogar angefangen hatte strace in die Loesungssuche mit einzubeziehen. Nach einigen Mails zwischen Dirk und mir kam dann die entscheidende Frage „Deine .ssh/config ist eine Unix-Datei, oder?“.
ramon@zak:~$ file .ssh/config .ssh/config: ASCII text
Ja, offensichtlich war die Datei „in Ordnung“. Aber was war mit meiner Datei, in der alle Server eingetragen sind?
ramon@zak ~ $ file server server: ASCII text, with CRLF line terminators
Ja, da muss man erst mal drauf kommen. In der Datei war nicht, wie bei Linux-Dateien typisch, nur ein Line Feed, sondern ein Carriage Return mit anschliessendem Line Feed zu finden. In der Regel kommen Dateien mit einem CRLF aus dem Windows-Umfeld.
Als ich die Datei bereinigt hatte, hat auch mein oben genannte Aufruf endlich funktioniert. Viele Beispiele, wie so eine Bereinigung aussehen kann, finden sich unter HowTo: UNIX / Linux Convert DOS Newlines CR-LF to Unix/Linux Format. Unklar ist mir weiterhin, wieso die Datei bei mir auf einmal mit einem CRLF auftaucht :)