summaryrefslogtreecommitdiff
path: root/src/rpc/virnetsshsession.h
diff options
context:
space:
mode:
authorPeter Krempa <pkrempa@redhat.com>2011-11-14 15:30:23 +0100
committerPeter Krempa <pkrempa@redhat.com>2012-08-21 14:47:09 +0200
commit1193fc5f4465a622b22c10b16ab8081e98c2e622 (patch)
treed249745ceaa40c297998c66b778ba5e2f16bb3ca /src/rpc/virnetsshsession.h
parent9136032a66156b2434c816af1d6033055dce9606 (diff)
downloadlibvirt-1193fc5f4465a622b22c10b16ab8081e98c2e622.tar.gz
libssh2_transport: add main libssh2 transport implementation
This patch adds helper functions that enable us to use libssh2 in conjunction with libvirt's virNetSockets for ssh transport instead of spawning "ssh" client process. This implemetation supports tunneled plaintext, keyboard-interactive, private key, ssh agent based and null authentication. Libvirt's Auth callback is used for interaction with the user. (Keyboard interactive authentication, adding of host keys, private key passphrases). This enables seamless integration into the application using libvirt. No helpers as "ssh-askpass" are needed. Reading and writing of OpenSSH style "known_hosts" files is supported. Communication is done using SSH exec channel, where the user may specify arbitrary command to be executed on the remote side and reads and writes to/from stdin/out are sent through the ssh channel. Usage of stderr is not (yet) supported.
Diffstat (limited to 'src/rpc/virnetsshsession.h')
-rw-r--r--src/rpc/virnetsshsession.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/rpc/virnetsshsession.h b/src/rpc/virnetsshsession.h
new file mode 100644
index 0000000000..eb92e43fd2
--- /dev/null
+++ b/src/rpc/virnetsshsession.h
@@ -0,0 +1,83 @@
+/*
+ * virnetsshsession.h: ssh transport provider based on libssh2
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Author: Peter Krempa <pkrempa@redhat.com>
+ */
+#ifndef __VIR_NET_SSH_SESSION_H__
+# define __VIR_NET_SSH_SESSION_H__
+
+# include "internal.h"
+
+typedef struct _virNetSSHSession virNetSSHSession;
+typedef virNetSSHSession *virNetSSHSessionPtr;
+
+virNetSSHSessionPtr virNetSSHSessionNew(void);
+void virNetSSHSessionFree(virNetSSHSessionPtr sess);
+
+typedef enum {
+ VIR_NET_SSH_HOSTKEY_VERIFY_NORMAL,
+ VIR_NET_SSH_HOSTKEY_VERIFY_AUTO_ADD,
+ VIR_NET_SSH_HOSTKEY_VERIFY_IGNORE
+} virNetSSHHostkeyVerify;
+
+int virNetSSHSessionSetChannelCommand(virNetSSHSessionPtr sess,
+ const char *command);
+
+void virNetSSHSessionAuthReset(virNetSSHSessionPtr sess);
+
+int virNetSSHSessionAuthSetCallback(virNetSSHSessionPtr sess,
+ virConnectAuthPtr auth);
+
+int virNetSSHSessionAuthAddPasswordAuth(virNetSSHSessionPtr sess,
+ const char *username,
+ const char *password);
+
+int virNetSSHSessionAuthAddAgentAuth(virNetSSHSessionPtr sess,
+ const char *username);
+
+int virNetSSHSessionAuthAddPrivKeyAuth(virNetSSHSessionPtr sess,
+ const char *username,
+ const char *keyfile,
+ const char *password);
+
+int virNetSSHSessionAuthAddKeyboardAuth(virNetSSHSessionPtr sess,
+ const char *username,
+ int tries);
+
+int virNetSSHSessionSetHostKeyVerification(virNetSSHSessionPtr sess,
+ const char *hostname,
+ int port,
+ const char *hostsfile,
+ bool readonly,
+ virNetSSHHostkeyVerify opt);
+
+int virNetSSHSessionConnect(virNetSSHSessionPtr sess,
+ int sock);
+
+ssize_t virNetSSHChannelRead(virNetSSHSessionPtr sess,
+ char *buf,
+ size_t len);
+
+ssize_t virNetSSHChannelWrite(virNetSSHSessionPtr sess,
+ const char *buf,
+ size_t len);
+
+bool virNetSSHSessionHasCachedData(virNetSSHSessionPtr sess);
+
+#endif /* ___VIR_NET_SSH_SESSION_H_ */