2011-01-10 71 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的代码!

相关问题