From 9f45d4f4b8bcc8031926e69d9442e61ce34f0286 Mon Sep 17 00:00:00 2001 From: miao_kaibo Date: Mon, 26 Oct 2020 17:42:47 +0800 Subject: [PATCH 1/4] add pexpect for ssh and scp service --- common/common.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/common/common.py b/common/common.py index c173456..a8b70ec 100644 --- a/common/common.py +++ b/common/common.py @@ -6,9 +6,83 @@ date: 2020-10-20 15:50 function for all """ +import pexpect + def str_to_bool(s): """ change string to bool """ return s.lower() in ("yes", "true", "t", "1") + + +class Pexpect(object): + """ + expect by python + """ + def __init__(self, user, ip, passwd, port=None): + """ + init connect message + user: user for system + ip: ip of the system + port: port for connectiong by sshd + """ + self.user = user + self.ip = ip + self.passwd = passwd + self.port = port + + def _expect(self, process): + for i in range(5): + ret=process.expect(["(yes/no)", "Password", "password", pexpect.EOF,\ + pexpect.exceptions.TIMEOUT], timeout=1) + print(ret) + if ret == 0: + process.sendline("yes\n") + if ret == 1 or ret == 2: + process.sendline("%s\n" % self.passwd) + break + if ret == 3 or ret == 4: + break + + def ssh_cmd(self, cmd): + """ + cmd: command will be runnd + return: response of command + """ + if self.port: + cmd = "ssh -p %s %s@%s '%s'" % (self.port, self.user, self.ip, cmd) + else: + cmd = "ssh %s@%s '%s'" % (self.user, self.ip, cmd) + print(cmd) + process = pexpect.spawn(cmd) + self._expect(process) + res = process.readlines() + process.close() + + return res + + def scp_file(self, src_file, dest_dir): + """ + src_file: + dest_dir: + """ + if self.port: + cmd = "scp -P %s %s %s@%s:%s" % (self.port, src_file, self.user, self.ip, dest_dir) + else: + cmd = "scp %s %s@%s:%s" % (src_file, self.user, self.ip, self.dest_dir) + print(cmd) + process = pexpect.spawn(cmd) + self._expect(process) + res = process.readlines() + process.close() + + return res + + +if __name__ == "__main__": + test = Pexpect("root", "127.0.0.1", "123456", port=2224) + res = test.ssh_cmd("pwd") + print(res) + res = test.scp_file("./ip.txt", "~") + print(res) -- Gitee From c97195ef9252670c6dc0f9c7c1d7b22e4583029d Mon Sep 17 00:00:00 2001 From: miao_kaibo Date: Mon, 26 Oct 2020 17:49:27 +0800 Subject: [PATCH 2/4] delete one space --- common/common.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/common.py b/common/common.py index a8b70ec..038bed1 100644 --- a/common/common.py +++ b/common/common.py @@ -34,7 +34,7 @@ class Pexpect(object): def _expect(self, process): for i in range(5): - ret=process.expect(["(yes/no)", "Password", "password", pexpect.EOF,\ + ret=process.expect(["(yes/no)", "Password", "password", pexpect.EOF, \ pexpect.exceptions.TIMEOUT], timeout=1) print(ret) if ret == 0: @@ -70,7 +70,7 @@ class Pexpect(object): if self.port: cmd = "scp -P %s %s %s@%s:%s" % (self.port, src_file, self.user, self.ip, dest_dir) else: - cmd = "scp %s %s@%s:%s" % (src_file, self.user, self.ip, self.dest_dir) + cmd = "scp %s %s@%s:%s" % (src_file, self.user, self.ip, self.dest_dir) print(cmd) process = pexpect.spawn(cmd) self._expect(process) -- Gitee From c8658c84f31e5f7ebf8a6987653dc116aec9985f Mon Sep 17 00:00:00 2001 From: miao_kaibo Date: Mon, 26 Oct 2020 17:51:46 +0800 Subject: [PATCH 3/4] delete one space --- common/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/common.py b/common/common.py index 038bed1..93620e3 100644 --- a/common/common.py +++ b/common/common.py @@ -34,7 +34,7 @@ class Pexpect(object): def _expect(self, process): for i in range(5): - ret=process.expect(["(yes/no)", "Password", "password", pexpect.EOF, \ + ret=process.expect(["(yes/no)", "Password", "password", pexpect.EOF, \ pexpect.exceptions.TIMEOUT], timeout=1) print(ret) if ret == 0: -- Gitee From 7554a9b32a50b9df068c3bcdaa1282a898262748 Mon Sep 17 00:00:00 2001 From: miao_kaibo Date: Mon, 26 Oct 2020 17:53:58 +0800 Subject: [PATCH 4/4] replace res by msg --- common/common.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/common.py b/common/common.py index 93620e3..ba1baa7 100644 --- a/common/common.py +++ b/common/common.py @@ -57,10 +57,10 @@ class Pexpect(object): print(cmd) process = pexpect.spawn(cmd) self._expect(process) - res = process.readlines() + msg = process.readlines() process.close() - return res + return msg def scp_file(self, src_file, dest_dir): """ @@ -74,10 +74,10 @@ class Pexpect(object): print(cmd) process = pexpect.spawn(cmd) self._expect(process) - res = process.readlines() + msg = process.readlines() process.close() - return res + return msg if __name__ == "__main__": -- Gitee