libssh2的支持
openwrt本身带有libssh和libssh2两种三方库。我们需要修改编译使其参与编译
./scripts/feeds update -a
./scripts/feeds install -a
执行make menuconfig操作,勾选你想要的三方库
ssh服务器的连接
这里需要注意的主要就是makefile里面记得添加ssh2的依赖,要不编译或者运行会出问题,
其他想做的操作,替换新建文件的逻辑就可以
#include "rk_stick.h"int main(int argc, char **argv)
{LIBSSH2_SESSION *session = NULL;const char *hostname = "192.168.180.8";const char *username = "toybrick";const char *password = "toybrick";int rc = -1, sock;// 初始化libssh2库rc = libssh2_init(0);if (rc != 0) {fprintf(stderr, "Failed to initialize libssh2\n");return -1;}// 创建套接字sock = socket(AF_INET, SOCK_STREAM, 0);if (sock == -1) {fprintf(stderr, "Failed to create socket\n");return -1;}// 连接到远程主机struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(22);sin.sin_addr.s_addr = inet_addr(hostname);if (connect(sock, (struct sockaddr*)(&sin), sizeof(struct sockaddr_in)) != 0) {fprintf(stderr, "Failed to connect to remote host\n");close(sock);return -1;}// 创建SSH会话session = libssh2_session_init();if (!session) {fprintf(stderr, "Failed to create SSH session\n");return -1;}// 连接到SSH服务器rc = libssh2_session_startup(session, sock);if (rc) {fprintf(stderr, "Failed to establish SSH session\n");libssh2_session_free(session);return -1;}// 认证rc = libssh2_userauth_password(session, username, password);if (rc) {fprintf(stderr, "Authentication failed\n");libssh2_session_free(session);return -1;}// 执行远程命令LIBSSH2_CHANNEL *channel = libssh2_channel_open_session(session);if (channel) {libssh2_channel_exec(channel, "touch /tmp/test.config");libssh2_channel_close(channel);libssh2_channel_free(channel);}// 关闭会话libssh2_session_disconnect(session, "Bye bye, thanks for playing");libssh2_session_free(session);// 关闭libssh2库libssh2_exit();return 0;
}
结果验证
在服务器的tmp目录下查看是否有test.config文件