From 78ab53c3f66ce74bd7cbf649a9b4f47a151f9df9 Mon Sep 17 00:00:00 2001 From: Alfredo Deza Date: Fri, 8 Nov 2013 10:26:06 -0500 Subject: [PATCH] a new module for SSH utilities Signed-off-by: Alfredo Deza --- ceph_deploy/util/ssh.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 ceph_deploy/util/ssh.py diff --git a/ceph_deploy/util/ssh.py b/ceph_deploy/util/ssh.py new file mode 100644 index 0000000..6bcca04 --- /dev/null +++ b/ceph_deploy/util/ssh.py @@ -0,0 +1,32 @@ +import logging +from ceph_deploy.lib.remoto import process +from ceph_deploy.lib.remoto.connection import needs_ssh +from ceph_deploy.connection import get_local_connection + + +def can_connect_passwordless(hostname): + """ + Ensure that current host can SSH remotely to the remote + host using the ``BatchMode`` option to prevent a password prompt. + + That attempt will error with an exit status of 255 and a ``Permission + denied`` message. + """ + # Ensure we are not doing this for local hosts + if not needs_ssh(hostname): + return True + + logger = logging.getLogger(hostname) + with get_local_connection(logger) as conn: + # Check to see if we can login, disabling password prompts + command = ['ssh', '-CT', '-o', 'BatchMode=yes', hostname] + out, err, retval = process.check(conn, command, stop_on_error=False) + expected_error = 'Permission denied (publickey,password)' + has_key_error = False + for line in err: + if expected_error in line: + has_key_error = True + + if retval == 255 and has_key_error: + return False + return True -- 2.47.3