Mercurial > hg > KCl
diff kcl/ssh.py @ 0:0f44ee073173 default tip
fake salt, initial commit
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Mon, 06 Feb 2017 01:10:22 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kcl/ssh.py Mon Feb 06 01:10:22 2017 +0000 @@ -0,0 +1,62 @@ +""" +crappy python ssh wrapper +""" + +# imports +import subprocess + +string = (str, unicode) + + +def call(command, check=True, echo=True, **kwargs): + + cmd_str = command if isinstance(command, string) else subprocess.list2cmdline(command) + kwargs['shell'] = isinstance(command, string) + kwargs['stdout'] = subprocess.PIPE + kwargs['stderr'] = subprocess.PIPE + if echo: + print (cmd_str) + process = subprocess.Popen(command, **kwargs) + stdout, stderr = process.communicate() + if check and process.returncode: + raise subprocess.CalledProcessError(process.returncode, command, stdout) + return process.returncode, stdout, stderr + + +class Ssh(object): + """primative form of ssh session using subprocess""" + + def __init__(self, host, ssh='ssh', scp='scp', verbose=False): + self.host = host + self._ssh = ssh + self._scp = scp + self.verbose=verbose + + def command(self, command): + + # See: + # http://unix.stackexchange.com/questions/122616/why-do-i-need-a-tty-to-run-sudo-if-i-can-sudo-without-a-password + # http://unix.stackexchange.com/a/122618 + return [self._ssh, '-t', self.host, command] + + def sudo_command(self, command): + return self.command('sudo ' + command) + + def call(self, command): + returncode, output, _ = call(self.command(command), + echo=self.verbose) + return (returncode, output) + + def sudo(self, command): + returncode, output, _ = call(self.sudo_command(command), + echo=self.verbose) + return (returncode, output) + + def scp(self, src, dest): + """scp a file to the given host""" + + command = [self._scp, + src, + '{host}:{dest}'.format(host=self.host, dest=dest)] + returncode, output, _ = call(command) + return (returncode, output)