From 4c9c01098b047f2ac5543938f963bcdcaf2f9d0b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 21 Nov 2019 12:42:17 -0600 Subject: [PATCH] mgr/ssh: add 'ssh generate-key' and 'ssh clear-key' commands Signed-off-by: Sage Weil --- src/pybind/mgr/ssh/module.py | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/pybind/mgr/ssh/module.py b/src/pybind/mgr/ssh/module.py index 170fc071c03..8be5c2cb2fb 100644 --- a/src/pybind/mgr/ssh/module.py +++ b/src/pybind/mgr/ssh/module.py @@ -9,6 +9,7 @@ import os import random import tempfile import multiprocessing.pool +import subprocess from ceph.deployment import inventory from mgr_module import MgrModule @@ -348,6 +349,43 @@ class SSHOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin): self.ssh_config_tmp = None return 0, "", "" + @orchestrator._cli_write_command( + 'ssh generate-key', + desc='Generate a cluster SSH key (if not present)') + def _generate_key(self): + if not self.ssh_pub or not self.ssh_key: + self.log.info('Generating ssh key...') + tmp_dir = tempfile.TemporaryDirectory() + path = tmp_dir.name + '/key' + try: + subprocess.call([ + '/usr/bin/ssh-keygen', + '-C', 'ceph-%s' % self._cluster_fsid, + '-N', '', + '-f', path + ]) + with open(path, 'r') as f: + secret = f.read() + with open(path + '.pub', 'r') as f: + pub = f.read() + finally: + os.unlink(path) + os.unlink(path + '.pub') + tmp_dir.cleanup() + self.set_store('ssh_identity_key', secret) + self.set_store('ssh_identity_pub', pub) + self._reconfig_ssh() + return 0, '', '' + + @orchestrator._cli_write_command( + 'ssh clear-key', + desc='Clear cluster SSH key') + def _clear_key(self): + self.set_store('ssh_identity_key', None) + self.set_store('ssh_identity_pub', None) + self._reconfig_ssh() + return 0, '', '' + @orchestrator._cli_read_command( 'ssh get-pub-key', desc='Show SSH public key for connecting to cluster hosts') -- 2.39.5