2011-01-10 2 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

내 코드를 의도 한 Ismail, thx : – ClosedID

답변

1

사용 libssh 프로그램에 SSH 기능을 추가 : 여기

는 소스 코드입니다.

+0

고마워요! 사실은 (원격 명령을 실행하지 않고) 인증 만하면됩니다. 나는 그것을 스스로 할 수 있습니까 (교육적인 이유로 말하면됩니까)? 이미 libssh의 소스 코드를 살펴 봤지만 조금 모자라다. – ClosedID

+1

아마도 OpenSSL (OpenSSH가 사용하는 것)을 통해 수행 될 수 있었지만, 얼마나 어려운 일인지 정확히 알 수는 없었다. – ismail

+2

'libssh2'를 시도해 볼 수도 있습니다. 이 두 가지 중 하나를 직접 시도하는 것보다 훨씬 더 의미가 있습니다. –

1

SSH는 여러 개의 레이어가있는 매우 복잡한 프로토콜입니다.

사용자 인증을 받기 전에 프로토콜을 시작해야하며 원격 호스트 자격 증명을 확인하고 암호화 된 연결을 시작하십시오.

그런 다음 지원할 수있는 사용자 (공개 키, 암호, 키보드 대화 형 등)를 인증하는 몇 가지 방법이 있습니다.

Wikipedia page for SSH에는 관련된 모든 RFC에 대한 링크가 있습니다.

정말 libssh 또는 libssh2 또는 OpenSSH의 코드를 사용하십시오!

+1

OpenSSH 코드를 사용하는 것이 좋습니다. 고마워. – ClosedID

관련 문제