2016-11-11 13 views
0

libssh 라이브러리를 사용 중이고 새 SFTP 세션을 만들려고합니다. 내가SFTP libssh 실패

ssh_packet_unimplemented: Received SSH_MSG_UNIMPLEMENTED (sequence number 3)

의 오류 메시지가 계속 나는 원격 서버의 시스템 로그를 확인하고 난합니다 (에서 가져온 다음을 사용하려고이 오류가 몇 가지 이유로 오류

dispatch_protocol_error: type 90 seq 3 [preauth]

발견 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 또는 원격 셸을 열 때도 같은 오류가 발생합니다.

나는 내 문제에 관해 많은 연구를했지만 어떤 구제책도 찾을 수 없었다. 어떤 도움이라도 좋을 것입니다.

편집 :

내가 /var/log/auth.log을 통해 보면서이 발견 된 아마존 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 :

나는

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); 

나는 tutorial 혼란 된 서버에 연결하려면 다음 코드를 사용했다. 서버에 제대로 연결하는 코드를 작성하지 않았을 수 있습니다.

+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 
}