#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;
}