From f90ae73b6d0d8c6993a200045770344ce5252a92 Mon Sep 17 00:00:00 2001 From: Aris Adamantiadis Date: Sun, 6 Sep 2009 12:54:57 +0300 Subject: [PATCH] Refactored the connect_ssh example function into a new file --- examples/CMakeLists.txt | 1 + examples/connect_ssh.c | 63 ++++++++++++++++++++++++++++++++++++++ examples/examples_common.h | 3 +- 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 examples/connect_ssh.c diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 8086292c..b0d40d9f 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -4,6 +4,7 @@ set(examples_SRCS libssh_scp.c authentication.c knownhosts.c + connect_ssh.c ) include_directories( diff --git a/examples/connect_ssh.c b/examples/connect_ssh.c new file mode 100644 index 00000000..cfc6bb12 --- /dev/null +++ b/examples/connect_ssh.c @@ -0,0 +1,63 @@ +/* + * connect_ssh.c + * This file contains an example of how to connect to a + * SSH server using libssh + */ + +/* +Copyright 2009 Aris Adamantiadis + +This file is part of the SSH Library + +You are free to copy this file, modify it in any way, consider it being public +domain. This does not apply to the rest of the library though, but it is +allowed to cut-and-paste working code from this file to any license of +program. +The goal is to show the API in action. It's not a reference on how terminal +clients must be made or how a client should react. + */ + +#include +#include "examples_common.h" +#include + +ssh_session connect_ssh(const char *host, const char *user,int verbosity){ + ssh_session session; + ssh_options options; + int auth=0; + + options=ssh_options_new(); + if(user != NULL){ + if (ssh_options_set_username(options,user) < 0) { + ssh_options_free(options); + return NULL; + } + } + + if (ssh_options_set_host(options,host) < 0) { + ssh_options_free(options); + return NULL; + } + ssh_options_set_log_verbosity(options,verbosity); + session=ssh_new(); + ssh_set_options(session,options); + if(ssh_connect(session)){ + fprintf(stderr,"Connection failed : %s\n",ssh_get_error(session)); + ssh_disconnect(session); + return NULL; + } + if(verify_knownhost(session)<0){ + ssh_disconnect(session); + return NULL; + } + auth=authenticate_console(session); + if(auth==SSH_AUTH_SUCCESS){ + return session; + } else if(auth==SSH_AUTH_DENIED){ + fprintf(stderr,"Authentication failed\n"); + } else { + fprintf(stderr,"Error while authenticating : %s\n",ssh_get_error(session)); + } + ssh_disconnect(session); + return NULL; +} diff --git a/examples/examples_common.h b/examples/examples_common.h index 55f5db7d..bc30c933 100644 --- a/examples/examples_common.h +++ b/examples/examples_common.h @@ -13,9 +13,10 @@ clients must be made or how a client should react. #ifndef EXAMPLES_COMMON_H_ #define EXAMPLES_COMMON_H_ +#include int authenticate_console(ssh_session session); int authenticate_kbdint(ssh_session session); int verify_knownhost(ssh_session session); - +ssh_session connect_ssh(const char *hostname, const char *user, int verbosity); #endif /* EXAMPLES_COMMON_H_ */