2011-01-10 29 views
3

我想通過BSD套接字在ssh-server上進行身份驗證。我知道如何發起連接,但不知道如何進行真正的身份驗證。感謝您爲我指出正確方向的時間。通過BSD套接字在SSH上進行身份驗證

這裏是源代碼:

// 
#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

伊斯梅爾,thx打算我的代碼:) – ClosedID 2011-01-20 11:30:34

回答

1

使用libssh添加SSH功能,你的程序。

+0

謝謝!我實際上只需要進行身份驗證(不執行遠程命令)。我可以自己做嗎(說出於教育原因)?我已經看過了libssh的源代碼,但是對我來說有點過分... – ClosedID 2011-01-10 14:30:22

+1

也許可以通過OpenSSL完成(這就是OpenSSH使用的),但我不確定它會有多難。 – ismail 2011-01-10 14:33:08

1

SSH是一個相當複雜的協議,有幾個層次。

在進入用戶認證之前,您必須啓動協議,檢查遠程主機憑證並啓動加密連接。

然後,有幾種方法可以驗證您可能想要支持的用戶(公鑰,密碼,鍵盤交互等)。

Wikipedia page for SSH已鏈接到所有相關的RFC。

真的,使用libssh或libssh2或來自OpenSSH的代碼!

相關問題