summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/lib/oeqa/utils/sshcontrol.py23
1 files changed, 12 insertions, 11 deletions
diff --git a/meta/lib/oeqa/utils/sshcontrol.py b/meta/lib/oeqa/utils/sshcontrol.py
index 7de7c3eddd..643d0ad362 100644
--- a/meta/lib/oeqa/utils/sshcontrol.py
+++ b/meta/lib/oeqa/utils/sshcontrol.py
@@ -6,7 +6,6 @@
6# running commands and copying files to/from a target. 6# running commands and copying files to/from a target.
7# It's used by testimage.bbclass and tests in lib/oeqa/runtime. 7# It's used by testimage.bbclass and tests in lib/oeqa/runtime.
8 8
9
10import subprocess 9import subprocess
11import time 10import time
12import os 11import os
@@ -19,6 +18,12 @@ class SSHControl(object):
19 self._out = '' 18 self._out = ''
20 self._ret = 126 19 self._ret = 126
21 self.logfile = logfile 20 self.logfile = logfile
21 self.ssh_options = [
22 '-o', 'UserKnownHostsFile=/dev/null',
23 '-o', 'StrictHostKeyChecking=no',
24 '-o', 'LogLevel=ERROR'
25 ]
26 self.ssh = ['ssh', '-l', 'root'] + self.ssh_options
22 27
23 def log(self, msg): 28 def log(self, msg):
24 if self.logfile: 29 if self.logfile:
@@ -28,7 +33,7 @@ class SSHControl(object):
28 def _internal_run(self, cmd): 33 def _internal_run(self, cmd):
29 # We need this for a proper PATH 34 # We need this for a proper PATH
30 cmd = ". /etc/profile; " + cmd 35 cmd = ". /etc/profile; " + cmd
31 command = ['ssh', '-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no', '-l', 'root', self.host, cmd ] 36 command = self.ssh + [self.host, cmd]
32 self.log("[Running]$ %s" % " ".join(command)) 37 self.log("[Running]$ %s" % " ".join(command))
33 # ssh hangs without os.setsid 38 # ssh hangs without os.setsid
34 proc = subprocess.Popen(command, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, preexec_fn=os.setsid) 39 proc = subprocess.Popen(command, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, preexec_fn=os.setsid)
@@ -40,8 +45,6 @@ class SSHControl(object):
40 if time is 0 will let cmd run until it finishes. 45 if time is 0 will let cmd run until it finishes.
41 Time can be passed to here or can be set per class instance.""" 46 Time can be passed to here or can be set per class instance."""
42 47
43
44
45 if self.host: 48 if self.host:
46 sshconn = self._internal_run(cmd) 49 sshconn = self._internal_run(cmd)
47 else: 50 else:
@@ -70,15 +73,14 @@ class SSHControl(object):
70 else: 73 else:
71 self._out = sshconn.stdout.read() 74 self._out = sshconn.stdout.read()
72 self._ret = sshconn.poll() 75 self._ret = sshconn.poll()
73 # remove first line from output which is always smth like (unless return code is 255 - which is a ssh error): 76 # strip the last LF so we can test the output
74 # Warning: Permanently added '192.168.7.2' (RSA) to the list of known hosts. 77 self._out = self._out.rstrip()
75 if self._ret != 255:
76 self._out = '\n'.join(self._out.splitlines()[1:])
77 self.log("%s" % self._out) 78 self.log("%s" % self._out)
78 self.log("[SSH command returned]: %s" % self._ret) 79 self.log("[SSH command returned]: %s" % self._ret)
79 return (self._ret, self._out) 80 return (self._ret, self._out)
80 81
81 def _internal_scp(self, cmd): 82 def _internal_scp(self, cmd):
83 cmd = ['scp'] + self.ssh_options + cmd
82 self.log("[Running SCP]$ %s" % " ".join(cmd)) 84 self.log("[Running SCP]$ %s" % " ".join(cmd))
83 scpconn = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, preexec_fn=os.setsid) 85 scpconn = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, preexec_fn=os.setsid)
84 out = scpconn.communicate()[0] 86 out = scpconn.communicate()[0]
@@ -90,12 +92,11 @@ class SSHControl(object):
90 return (ret, out) 92 return (ret, out)
91 93
92 def copy_to(self, localpath, remotepath): 94 def copy_to(self, localpath, remotepath):
93 actualcmd = ['scp', '-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no', localpath, 'root@%s:%s' % (self.host, remotepath)] 95 actualcmd = [localpath, 'root@%s:%s' % (self.host, remotepath)]
94 return self._internal_scp(actualcmd) 96 return self._internal_scp(actualcmd)
95 97
96
97 def copy_from(self, remotepath, localpath): 98 def copy_from(self, remotepath, localpath):
98 actualcmd = ['scp', '-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no', 'root@%s:%s' % (self.host, remotepath), localpath] 99 actualcmd = ['root@%s:%s' % (self.host, remotepath), localpath]
99 return self._internal_scp(actualcmd) 100 return self._internal_scp(actualcmd)
100 101
101 def get_status(self): 102 def get_status(self):