# Dem SSH-Befehl das Passwort mitgeben



## GalaxyWarrior (22. August 2006)

Hallo,
ist es möglich dem Befehl SSH direkt das Passwort des Remote Servers mitzuteilen? Ich Versuche den Status eines Lancom Routers über SSH abzufragen. In der Shell geht das ja, da kann ich einfach das Passwort eingeben. Wenn ich den Befehl aber von einer Website aus über PHP ausführen lasse, müsste die Verbindung ohne Passworteingabe funktionieren. Ich habe im Internet das Programm Keychain gefunden, aber schaffe es nicht eine Verbindung ohne Passwortabfrage herzustellen. Wobei soweit ich das verstanden habe müsste ich ja die Datei mit dem Public Key im /root/.ssh verzeichniss auf dem Zielhost ablegen, aber ich weiß nicht wo das bei dem Lancom Router sein soll, da man in der Shell nur den Status auslesen kann, aber nicht Tiefer in das System kommt. Ich hoffe ich habe meine Anliegen verständlich erklärt ^^

Gruß GalaxyWarrior


----------



## Caliterra (23. August 2006)

Unter welchem OS arbeitet Dein Client von dem Du aus abfragst. Wenn es Windows ist, kann man mit AutoIT den Prozess des Abfragens automatisieren.

http://www.autoitscript.com/

http://autoit.aufwaerts.de/index.php?sid=

http://de.wikipedia.org/wiki/AutoIt


----------



## Dennis Wronka (23. August 2006)

Ich hab mir grad mal kurz die Man-Page zu SSH (die sind manchmal richtig informativ, einen Blick reinwerfen kann also nie schaden  ) angeschaut und dort nichts gefunden, dass es moeglich waere gleich ein Passwort mitzugeben. Dementsprechend denke ich, dass dies nicht moeglich sein wird. Waere auch nicht wirklich praktisch, da dieses ja ansonsten auch ueber die Bash-History im Klartext einsehbar waere.


----------



## RedWing (23. August 2006)

Hallo,

schaumal da:
http://www.bluegum.com/Software/ssh-auth.html

Gruß,
RedWing


----------



## GalaxyWarrior (24. August 2006)

So arbeitet Keychain ja auch. Es wird ein Schlüssel generiert der dann im .ssh Verzeichnis auf de, remote Server abgelegt werden muss. Da ich aber eine SSH Verbindung zu einem Router herstellen will, weiß ich nicht wie ich diese Datei dort ablegen soll, da ich über SSH erstmal nur auf 3 Verzeichnisse zugriff habe die Informationen über Auslastung, WLAN Status usw. Enthalten, was ich ja auslesen will. 

@ Dennis Wronka
Ich dachte mehr so an einen Workaround dass man evtl. in einer Datei ein Passwort an eine user@ip binden kann, auf welches SSH dann zurückgreift.

Naja, wird dann wohl nicht gehen, aber trozdem danke

Gruß GalaxyWarrior


----------



## RedWing (24. August 2006)

Hallo,


> So arbeitet Keychain ja auch.



Sorry das mit dem Router hatte ich überlesen...



> Naja, wird dann wohl nicht gehen, aber trozdem danke



Geht nicht gibts nicht 
Zur Not, falls dein Vorhaben nicht allzu komplex ist, und du etwas Ahnung von C 
Programmierung hast, kannst du dir auch einen SSH Client für deinen Router
mit Passwort selber schreiben.
Diesen Client könntest du dann mit deinem PHP Skipt ansprechen.
Dabei würde dir die libssh behilflich sein:

http://0xbadc0de.be/wiki/doku.php?id=libssh:libssh

Gruß,
RedWing


----------



## RedWing (24. August 2006)

Hallo,

ich hab grad mal nachgeschaut, soviel musst du gar nicht programmieren können 
Also in dem Paket ist eine Beispielclient mit dabei.
In sample.c musst du gelegentlich den Teil (Ab Zeile 409):

```
if(auth!=SSH_AUTH_SUCCESS){
        password=getpass("Password : ");
        if(ssh_userauth_password(session,NULL,password) != SSH_AUTH_SUCCESS){
            fprintf(stderr,"Authentication failed: %s\n",ssh_get_error(session));
            ssh_disconnect(session);
            return -1;
        }
        memset(password,0,strlen(password));
    }
```

durch diesen ersetzen:


```
if(auth!=SSH_AUTH_SUCCESS){
//        password=getpass("Password : ");
        if(ssh_userauth_password(session,NULL,"passwort_in_plaintext") != SSH_AUTH_SUCCESS){
            fprintf(stderr,"Authentication failed: %s\n",ssh_get_error(session));
            ssh_disconnect(session);
            return -1;
        }
  //      memset(password,0,strlen(password));
    }
```

Kompilieren und dann einfach mit:

```
./samplessh user@host
```

ausprobieren...

Das ganze kann man natürlich noch dynamischer gestalten in dem man das 
Passwort dem Programm mit übergibt und dann anstatt es hart reinzukodieren,
argv der Funktion ssh_userauth_password mit übergibt...

Gruß,
RedWing


----------



## GalaxyWarrior (25. August 2006)

OK, danke, werde ich mal ausprobieren, hab von C leider weniger ahnung, Java und Delphi wären besser ^^ Aber is ja wirklich nicht viel zu verändern, danke.

Gruß GalaxyWarrior


----------

