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

3

我希望通过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;
}

Ismail,感谢你查看我的代码 :) - ClosedID
2个回答

1

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


谢谢!实际上我只需要进行身份验证(而不执行远程命令)。我可以自己做到这一点吗(比如出于教育目的)?我已经查看了libssh的源代码,但对我来说有些难以理解... - ClosedID
1
可能可以通过OpenSSL来完成(这就是OpenSSH使用的),但我不确定它有多难。 - ismail
2
你也可以尝试使用 libssh2。任何一种都比自己尝试做要更有意义。 - John Zwinck

1

SSH是一个具有多个层次的相当复杂的协议。

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

之后,有几种身份验证用户的方式可以支持(公钥、密码、键盘交互等)。

SSH的维基百科页面中有所有相关RFC的链接。

实际上,使用libssh或libssh2或来自OpenSSH的代码!


1
使用OpenSSH本身的代码是个好建议。谢谢。 - ClosedID

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接