2016-11-11 17 views
0

libsshライブラリを使用していて、新しいSFTPセッションを作成しようとしています。私は(から取られた私は、リモートサーバーのシスログをチェックし、以下を使用しようとしたとき、私はこのエラーを取得するいくつかの理由でエラーSFTP libssh failure

dispatch_protocol_error: type 90 seq 3 [preauth]

を見つけ

ssh_packet_unimplemented: Received SSH_MSG_UNIMPLEMENTED (sequence number 3)

のエラーメッセージが出続けますlibssh doc

int sftp_helloworld(ssh_session session) { 
    sftp_session sftp; 
    int rc; 
    sftp = sftp_new(session); // Freezes at this part 
    if (sftp == NULL) { 
    fprintf(stderr, "Error allocating SFTP session: %s\n", ssh_get_error(session)); 
    return SSH_ERROR; 
    } 
    rc = sftp_init(sftp); 
    if (rc != SSH_OK) { 
    fprintf(stderr, "Error initializing SFTP session: %s.\n", sftp_get_error(sftp)); 
    sftp_free(sftp); 
    return rc; 
    } 
    sftp_free(sftp); 
    return SSH_OK; 
} 

実際に動作しているのは、実際のssh接続だけです。 SCP、SFTPを使用している場合でも、リモートシェルを開いている場合も、同じエラーが発生します。

私の問題に関して多くの調査をしましたが、救済策が見つかりませんでした。どんな助けも素晴らしいだろう。

EDIT:

私は /var/log/auth.logを通じて見て、この発見のAmazon EC2サーバー上で

:私はSSH_OPTIONS_LOG_VERBOSITYSSH_LOG_PACKETに、すべてがスムーズに実行しlibsshコードで

sshd[24860]: Accepted publickey for ubuntu

sshd[24860]: pam_unix(sshd:session): session opened for user ubuntu by (uid=0)

sshd[24930]: dispatch_protocol_error: type 90 seq 3 [preauth]

を、それをsftp_new()に届きます。このエラーが発生し、SSH_MSG_UNIMPLEMENTEDメッセージでフリーズします。

channel_open: Creating a channel 43 with 64000 window and 32768 max packet

packet_send2: packet: wrote [len=44,padding=19,comp=24,payload=24]

channel_open: Sent a SSH_MSG_CHANNEL_OPEN type session for channel 43

ssh_socket_unbuffered_write: Enabling POLLOUT for socket

ssh_packet_socket_callback: packet: read type 3 [len=12,padding=6,comp=5,payload=5]

ssh_packet_process: Dispatching handler for packet type 3

ssh_packet_unimplemented: Received SSH_MSG_UNIMPLEMENTED (sequence number 3)

EDIT2:

私は私がtutorialで混乱していた、サーバーに接続するために

ssh_key pKey; 
int rc = ssh_pki_import_privkey_file(PC_PRIVATE_KEY_FILE, NULL, NULL, NULL, &pKey); 

ssh_session my_ssh_session = ssh_new(); 

ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, PC_HOST); 
ssh_options_set(my_ssh_session, SSH_OPTIONS_USER, PC_USER); 
ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &PC_PORT); 
ssh_options_set(my_ssh_session, SSH_OPTIONS_LOG_VERBOSITY, &PC_VERBOSITY); 

rc = ssh_connect(my_ssh_session); 

を次のコードを使用していました。私はサーバーに正しく接続するコードを書いていないかもしれません。

+0

あなたがすべてで、通常のSFTPクライアントを使用してサーバーに接続することはできますか? –

+0

@MartinPrikrylはい、私は 'ssh'、' sftp'と 'scp'を使ってサーバに接続できます。 – Amous

+0

可能なすべてのログを収集し、質問に編集します。サーバ側のログ(SSHサーバとは何ですか?)、 'sftp -vv'出力、libsshログです。 –

答えて

2

this tutorialによれば、サーバーに接続した後、自分自身を認証する必要があります。あなたは、公開鍵で認証ssh_connectに成功した呼び出しの後に以下を追加したい場合は、すなわち、:

int rc; 
// ... 
rc = ssh_userauth_publickey(my_ssh_session, NULL, pKey); 
if(rc != SSH_AUTH_SUCCESS) { 
    // error 
} else { 
    // all good, start SFTP/shell/etc 
}