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