#include <libssh/libssh.h>
#include <libssh/sftp.h>
 
int main() {
    ssh_session my_ssh_session;
    sftp_session sftp;
    int rc;
 
    // 创建 SSH 会话
    my_ssh_session = ssh_new();
    if (my_ssh_session == NULL) {
        return -1;
    }
 
    // 设置连接选项,如主机和用户名
    ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "example.com");
    ssh_options_set(my_ssh_session, SSH_OPTIONS_USER, "your_username");
 
    // 连接到 SSH 服务器
    rc = ssh_connect(my_ssh_session);
    if (rc != SSH_OK) {
        ssh_free(my_ssh_session);
        return -1;
    }
 
    // 进行用户认证(此处示例为公钥认证)
    rc = ssh_userauth_publickey_auto(my_ssh_session, NULL, NULL);
    if (rc != SSH_AUTH_SUCCESS) {
        ssh_disconnect(my_ssh_session);
        ssh_free(my_ssh_session);
        return -1;
    }
 
    // 创建 SFTP 会话
    sftp = sftp_new(my_ssh_session);
    if (sftp == NULL) {
        ssh_disconnect(my_ssh_session);
        ssh_free(my_ssh_session);
        return -1;
    }
 
    // 初始化 SFTP 会话
    rc = sftp_init(sftp);
    if (rc != SSH_OK) {
        sftp_free(sftp);
        ssh_disconnect(my_ssh_session);
        ssh_free(my_ssh_session);
        return -1;
    }
 
    // ... 此处可以进行具体的 SFTP 操作,如文件传输 ...
 file = sftp_open(sftp, REMOTE_FILE, O_RDONLY, 0);
    if (file == NULL) {
        sftp_free(sftp);
        ssh_disconnect(my_ssh_session);
        ssh_free(my_ssh_session);
        return -1;
    }
 
// 创建本地文件
local_file = fopen(LOCAL_FILE, "wb");
    if (local_file == NULL) {
         sftp_free(sftp);
        ssh_disconnect(my_ssh_session);
        ssh_free(my_ssh_session);
        return -1;
    }
 
//SFTP传输文件
while ((nbytes = sftp_read(file, buffer, sizeof(buffer))) > 0) {
        nwritten = fwrite(buffer, 1, nbytes, local_file);
        if (nwritten != nbytes) {
            fprintf(stderr, "Write error: %s\n", strerror(errno));
            fclose(local_file);
            sftp_close(file);
 
             sftp_free(sftp);
             ssh_disconnect(my_ssh_session);
             ssh_free(my_ssh_session);
            return -1;
        }
        LOGM("write: %d bytes", nwritten);
        fflush(stdout);
    }
 
// SFTP关闭文件
   fclose(local_file);
    sftp_close(file);
 
    // 清理资源
    sftp_free(sftp);
    ssh_disconnect(my_ssh_session);
    ssh_free(my_ssh_session);
 
    return 0;
}