#include #include #include #include #include #include #include int main (int argc, char ** argv) { if (argc < 2) { printf("usage: test \n"); return -1; } LIBSSH2_SESSION * session = NULL; session = libssh2_session_init(); libssh2_session_set_blocking(session, 1); // Uncomment to enable debug trace messages libssh2_trace(session, 0xff); if (!session) { printf("Failed to initialise session\n"); return -1; } int sock = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(22); sin.sin_addr.s_addr = inet_addr(argv[1]); if (connect(sock, (struct sockaddr*)(&sin), sizeof(struct sockaddr_in)) != 0) { printf("Failed to connect\n"); return -1; } if (libssh2_session_method_pref(session, LIBSSH2_METHOD_KEX, "diffie-hellman-group1-sha1") < 0) { printf("Failed to set method preference\n"); return -1; } if (libssh2_session_startup(session, sock) < 0) { printf("Failed to start session\n"); return -1; } printf("Successfully connected\n"); if (libssh2_userauth_publickey_fromfile(session, "admin", "/home/timm/keys/RouterOS_public.pub", "/home/timm/keys/RouterOS_private.ppk", "") < 0) { printf("Failed to authenticate\n"); return -1; } printf("Successfully authenticated\n"); struct stat sb; LIBSSH2_CHANNEL * channel = NULL; channel = libssh2_scp_recv(session, "firewall.rsc", &sb); if (channel == NULL) { printf("Failed to start scp\n"); char * error_message = NULL; int error_length = 0; libssh2_session_last_error(session, &error_message, &error_length, 0); int error_number = libssh2_session_last_errno(session); printf("%d: %s\n", error_number, error_message); return -1; } return 0; }