[注: このコードを物理マシンで実行したところ、動作しました (OS=Fedora 14)。しかし、仮想マシンにインストールされた Ubuntu で同じスクリプトを使用すると、機能しません。ifconfig 出力をキャプチャして保存/印刷しようとしています。]
VMPlayer(仮想マシン)にUbuntuをインストールしました。Python スクリプト言語を使用しており、Pexpect を使用して SSH 接続を自動化しようとしています。同じ Ubuntu 仮想マシンでスクリプトを実行しています。以下に、このスクリプトで行っていることを示します。
- Pexpect を使用して、SSH 経由でローカルホストに接続します。
- 「ifconfig」cli コマンドを実行し、出力をキャプチャします。
- この cli 出力を印刷します。
コードスニペット:
class Linux:
HOSTIP = ""
USER = ""
PASSWD = ""
HOST = ""
PROMPTTIMEOUT = 120
PROMPT = ""
ERRORFLAG = False
ERRORMSG = ""
CLIOUTPUT = ""
def __init__(self,host, user, passwd, prompt):
self.HOSTIP = host
self.USER = user
self.PASSWD = passwd
self.PROMPT = prompt
self.login()
def login(self):
try:
connection = "ssh " + self.USER + "@" + self.HOSTIP
self.HOST = pexpect.spawn(connection)
while 1:
returnNum = self.HOST.expect(["yes/no","password:"],120)
if returnNum == 0:
self.HOST.send("yes\r\n")
elif returnNum == 1:
self.HOST.send(self.PASSWD + "\r\n")
break
self.HOST.expect(self.PROMPT,120)
self.CLIOUTPUT = self.HOST.before
self.HOST.send("\r\n")
self.HOST.expect(self.PROMPT,120)
self.CLIOUTPUT = self.CLIOUTPUT + self.HOST.before
except Exception:
return False
return True
def executeCLI(self, cmd):
self.resetErrors()
try:
self.HOST.send("\r\n")
self.HOST.expect(self.PROMPT,120)
self.HOST.send(cmd + "\r\n")
self.HOST.expect(self.PROMPT,120)
self.CLIOUTPUT = self.HOST.before
self.HOST.send("\r\n")
self.HOST.expect(self.PROMPT,120)
self.CLIOUTPUT = self.CLIOUTPUT + self.HOST.before
except Exception:
return False
return True
def getCLIOutput(self):
return self.CLIOUTPUT
# Testing Class Linux.py
host = Linux("1.1.1.1", "admin", "admin123", "@ubuntu")
host.executeCLI("ifconfig")
print("Output : " + str(host.getCLIOutput()))
結果出力:
admin@ubuntu12:/home/Host# python Linux.py
Output : 12: ~admin12:~$
admin@ubuntu12:/home/Host#
期待される出力:
admin@ubuntu12:/home/Host# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:60:6b:be
inet addr:192.168.2.5 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe60:6bbe/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1733 errors:0 dropped:0 overruns:0 frame:0
TX packets:1539 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:205502 (205.5 KB) TX bytes:252126 (252.1 KB)
Interrupt:19 Base address:0x2024
eth1 Link encap:Ethernet HWaddr 00:0c:29:60:6b:c8
inet addr:20.20.20.2 Bcast:20.20.20.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe60:6bc8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:49 errors:0 dropped:0 overruns:0 frame:0
TX packets:82 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5132 (5.1 KB) TX bytes:12322 (12.3 KB)
Interrupt:16 Base address:0x20a4
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:170 errors:0 dropped:0 overruns:0 frame:0
TX packets:170 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:27353 (27.3 KB) TX bytes:27353 (27.3 KB)
admin@ubuntu12:/home/Host#
LOCALHOST への SSH ログインを手動で行い、CLI で IFCONFIG コマンドを実行すると、画面に次の出力が表示されます。
admin@ubuntu12:/home/Host# ssh admin@192.168.2.5
admin@192.168.2.5's password:
Welcome to Ubuntu 12.04.3 LTS (GNU/Linux 3.2.0-29-generic-pae i686)
* Documentation: https://help.ubuntu.com/
67 packages can be updated.
35 updates are security updates.
Last login: Sat Sep 21 22:55:36 2013 from 192.168.2.5
admin@ubuntu12:~$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:60:6b:be
inet addr:192.168.2.5 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe60:6bbe/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4270 errors:0 dropped:0 overruns:0 frame:0
TX packets:3664 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:463331 (463.3 KB) TX bytes:625129 (625.1 KB)
Interrupt:19 Base address:0x2024
eth1 Link encap:Ethernet HWaddr 00:0c:29:60:6b:c8
inet addr:20.20.20.2 Bcast:20.20.20.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe60:6bc8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:153 errors:0 dropped:0 overruns:0 frame:0
TX packets:105 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:15340 (15.3 KB) TX bytes:14388 (14.3 KB)
Interrupt:16 Base address:0x20a4
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1456 errors:0 dropped:0 overruns:0 frame:0
TX packets:1456 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:192908 (192.9 KB) TX bytes:192908 (192.9 KB)
admin@ubuntu12:~$