comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:0f44ee073173
1 """
2 crappy python ssh wrapper
3 """
4
5 # imports
6 import subprocess
7
8 string = (str, unicode)
9
10
11 def call(command, check=True, echo=True, **kwargs):
12
13 cmd_str = command if isinstance(command, string) else subprocess.list2cmdline(command)
14 kwargs['shell'] = isinstance(command, string)
15 kwargs['stdout'] = subprocess.PIPE
16 kwargs['stderr'] = subprocess.PIPE
17 if echo:
18 print (cmd_str)
19 process = subprocess.Popen(command, **kwargs)
20 stdout, stderr = process.communicate()
21 if check and process.returncode:
22 raise subprocess.CalledProcessError(process.returncode, command, stdout)
23 return process.returncode, stdout, stderr
24
25
26 class Ssh(object):
27 """primative form of ssh session using subprocess"""
28
29 def __init__(self, host, ssh='ssh', scp='scp', verbose=False):
30 self.host = host
31 self._ssh = ssh
32 self._scp = scp
33 self.verbose=verbose
34
35 def command(self, command):
36
37 # See:
38 # http://unix.stackexchange.com/questions/122616/why-do-i-need-a-tty-to-run-sudo-if-i-can-sudo-without-a-password
39 # http://unix.stackexchange.com/a/122618
40 return [self._ssh, '-t', self.host, command]
41
42 def sudo_command(self, command):
43 return self.command('sudo ' + command)
44
45 def call(self, command):
46 returncode, output, _ = call(self.command(command),
47 echo=self.verbose)
48 return (returncode, output)
49
50 def sudo(self, command):
51 returncode, output, _ = call(self.sudo_command(command),
52 echo=self.verbose)
53 return (returncode, output)
54
55 def scp(self, src, dest):
56 """scp a file to the given host"""
57
58 command = [self._scp,
59 src,
60 '{host}:{dest}'.format(host=self.host, dest=dest)]
61 returncode, output, _ = call(command)
62 return (returncode, output)