通过BSD套接字在SSH上进行身份验证

时间:2011-01-10 14:11:55

标签: c sockets ssh

我想通过BSD套接字在ssh-server上进行身份验证。我知道如何启动连接但不知道如何进行身份验证。感谢您指点我正确方向的时间。

以下是源代码:

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

2 个答案:

答案 0 :(得分:1)

使用libssh为您的程序添加SSH功能。

答案 1 :(得分:1)

SSH是一个非常复杂的协议,有多个层。

在进行用户身份验证之前,您必须启动协议,检查远程主机凭据并启动加密连接。

之后,有几种方法可以验证您可能想要支持的用户(公钥,密码,键盘交互等)。

Wikipedia page for SSH包含指向所有相关RFC的链接。

真的,使用libssh或libssh2或OpenSSH中的代码!