2011-01-10 10 views
3

Ich möchte auf SSH-Server über BSD-Socket authentifizieren. Ich weiß, wie ich eine Verbindung initiiere, weiß aber nicht, wie ich mich authentifizieren soll. Danke für deine Zeit, wenn sie mich in die richtige Richtung weisen. Hierauthentifizieren auf SSH über BSD-Socket

ist der Quellcode:

// 
#include <stdio.h>  // printf() 
#include <sys/types.h> // socket data types 
#include <sys/socket.h> // socket(), connect(), send(), recv() 
#include <arpa/inet.h> // sockaddr_in, inet_addr() 
#include <stdlib.h>  // free() 
#include <unistd.h>  // close() 

int *ssh(char *host, int port, char *user, char *pass); 

int main(void) 
{ 
// create socket 
int *ssh_socket = ssh("127.0.0.1", 22, "root", "password"); 

// close and free 
close(*ssh_socket); 
free(ssh_socket); 

return 0; 
} 

int *ssh(char *host, int port, char *user, char *pass) 
{ 
int *sock = calloc(sizeof(int), 1); 
struct sockaddr_in addr = {.sin_family=AF_INET, \ 
          .sin_port=htons(port), \ 
          .sin_addr.s_addr=inet_addr(host)}; 

*sock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // create socket 
connect(*sock, (struct sockaddr *)&addr, sizeof(addr)); // init connection 


// here is the problem 
// how do I authenticate on this socket? 


return sock; 
} 
+0

Ismail, thx für die Absicht, meinen Code :) – ClosedID

Antwort

1

Verwenden libssh für das Hinzufügen von SSH-Funktionalität zu Ihrem Programm.

+0

Vielen Dank! Ich muss nur authentifizieren (ohne Remote-Befehle auszuführen). Kann ich das selbst machen (sagen wir aus pädagogischen Gründen)? Ich habe mir den Quellcode von libssh schon angeschaut, aber es ist ein wenig überwältigend für mich ... – ClosedID

+1

Möglicherweise könnte es über OpenSSL gemacht werden (das ist was OpenSSH verwendet), ich bin mir nicht ganz sicher, wie schwer es wäre. – ismail

+2

Sie könnten auch 'libssh2' versuchen. Beides wäre viel sinnvoller als der Versuch, es selbst zu tun. –

1

SSH ist ein ziemlich komplexes Protokoll mit mehreren Schichten.

Bevor Sie zur Benutzerauthentifizierung gelangen, müssen Sie das Protokoll einleiten, die Anmeldedaten des Remote-Hosts prüfen und eine verschlüsselte Verbindung starten.

Und danach gibt es mehrere Möglichkeiten, einen Benutzer zu authentifizieren, den Sie unterstützen möchten (öffentlicher Schlüssel, Passwd, Tastatur-Interaktiv usw.).

Die Wikipedia page for SSH enthält Links zu allen zugehörigen RFCs.

Wirklich, benutze libssh oder libssh2 oder den Code von OpenSSH!

+1

Um den Code von OpenSSH selbst zu verwenden, ist ein guter Vorschlag. Danke. – ClosedID