Inspect and add by default ssh multiplexing options.

This commit is contained in:
Darko Poljak 2016-03-10 20:20:41 +01:00
parent 2dfc30e3c4
commit 215e58eb38
1 changed files with 32 additions and 0 deletions

View File

@ -2,6 +2,7 @@
# -*- coding: utf-8 -*-
#
# 2010-2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2016 Darko Poljak (darko.poljak at gmail.com)
#
# This file is part of cdist.
#
@ -20,6 +21,32 @@
#
#
def inspect_ssh_mux_opts():
"""Inspect whether or not ssh supports multiplexing options"""
wanted_mux_opts = {
"ControlPath":"~/.ssh/master-%l-%r@%h:%p",
"ControlMaster":"auto",
"ControlPersist":"125",
}
# if checked key option is present then this assumes
# all options in value are present
check = {
"ControlMaster": ("ControlMaster", "ControlPath"),
"ControlPersist": ("ControlPersist",),
}
mux_opts = {}
for x in check:
try:
subprocess.check_output("ssh -o {}".format(x),
stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
foo = e.output.decode().lower()
if not "bad configuration option" in foo:
for o in check[x]:
mux_opts[o] = wanted_mux_opts[o]
foo = ["-o {}={}".format(x, mux_opts[x]) for x in mux_opts]
return " ".join(foo)
def commandline():
"""Parse command line"""
import argparse
@ -53,6 +80,11 @@ def commandline():
parser['banner'].set_defaults(func=cdist.banner.banner)
# Config
# inspect multiplexing options for default remote copy/exec scp/ssh
MUX_OPTS = inspect_ssh_mux_opts()
cdist.REMOTE_EXEC += MUX_OPTS
cdist.REMOTE_COPY += MUX_OPTS
parser['config'] = parser['sub'].add_parser('config',
parents=[parser['loglevel']])
parser['config'].add_argument('host', nargs='+',