1. Install Python into Windows
1.1 Download Latest Python 2 file from https://www.python.org/downloads/windows/
1.2 Double Click download python-2.7.15.exe file to install it.
1.3 Run Python
By Default, it will be installed at c:\Python27 folder
C:\Users\John>cd \ C:\>cd Python27 C:\Python27>python --version Python 2.7.15 C:\Python27>python Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:22:17) [MSC v.1500 32 bit (In tel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
1.4 Install paramiko module
Paramiko is a Python (2.7, 3.4+) implementation of the SSHv2 protocol [1], providing both client and server functionality. While it leverages a Python C extension for low level cryptography (Cryptography), Paramiko itself is a pure Python interface around SSH networking concepts.
- Install Python 2.7.11
- Download and install pycrypto win-amd64-py2.7.exe
- Now open a command prompt. If you have installed python at the following location:
c:\Python27 then change directory and go to Scripts directory.
pip install paramiko
- Now Test with the following command:
import paramiko
C:\Python27>cd Scripts C:\Python27\Scripts>pip install paramiko Collecting paramiko Downloading https://files.pythonhosted.org/packages/3e/db/cb7b6656e0e7387637ce 850689084dc0b94b44df31cc52e5fc5c2c4fd2c1/paramiko-2.4.1-py2.py3-none-any.whl (19 4kB) 100% |################################| 194kB 1.2MB/s Collecting bcrypt>=3.1.3 (from paramiko) Downloading https://files.pythonhosted.org/packages/4c/49/26ea2bf908e8d4250023 e3b104e01b97ce48d6a7687c589c15d0a9f57fda/bcrypt-3.1.4-cp27-cp27m-win32.whl Collecting pyasn1>=0.1.7 (from paramiko) Downloading https://files.pythonhosted.org/packages/d1/a1/7790cc85db38daa874f6 a2e6308131b9953feb1367f2ae2d1123bb93a9f5/pyasn1-0.4.4-py2.py3-none-any.whl (72kB ) 100% |################################| 81kB 1.6MB/s Collecting pynacl>=1.0.1 (from paramiko) Downloading https://files.pythonhosted.org/packages/f9/cc/0f1eb2ff37aa1b89cdc0 6c1721d057ca648efe7f51a4b67c29cee9db9f33/PyNaCl-1.2.1-cp27-cp27m-win32.whl (162k B) 100% |################################| 163kB 1.3MB/s Collecting cryptography>=1.5 (from paramiko) Downloading https://files.pythonhosted.org/packages/24/fc/4c5459b470068692fadd 135080bbec1ee5b9e9de27cfd04f5a0d4b7a2400/cryptography-2.3.1-cp27-cp27m-win32.whl (1.1MB) 100% |################################| 1.1MB 716kB/s Collecting six>=1.4.1 (from bcrypt>=3.1.3->paramiko) Downloading https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa 78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl Collecting cffi>=1.1 (from bcrypt>=3.1.3->paramiko) Downloading https://files.pythonhosted.org/packages/3a/84/9d1bf29b212853087318 696c38241a3af65b33ea2edaabad11f26826ecf4/cffi-1.11.5-cp27-cp27m-win32.whl (153kB ) 100% |################################| 153kB 1.2MB/s Collecting enum34; python_version < "3" (from cryptography>=1.5->paramiko) Downloading https://files.pythonhosted.org/packages/c5/db/e56e6b4bbac7c4a06de1 c50de6fe1ef3810018ae11732a50f15f62c7d050/enum34-1.1.6-py2-none-any.whl Collecting idna>=2.1 (from cryptography>=1.5->paramiko) Downloading https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1 af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58kB) 100% |################################| 61kB 1.7MB/s Collecting asn1crypto>=0.21.0 (from cryptography>=1.5->paramiko) Downloading https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a51057 6f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl (101kB) 100% |################################| 102kB 1.7MB/s Collecting ipaddress; python_version < "3" (from cryptography>=1.5->paramiko) Downloading https://files.pythonhosted.org/packages/fc/d0/7fc3a811e011d4b388be 48a0e381db8d990042df54aa4ef4599a31d39853/ipaddress-1.0.22-py2.py3-none-any.whl Collecting pycparser (from cffi>=1.1->bcrypt>=3.1.3->paramiko) Downloading https://files.pythonhosted.org/packages/8c/2d/aad7f16146f4197a11f8 e91fb81df177adcc2073d36a17b1491fd09df6ed/pycparser-2.18.tar.gz (245kB) 100% |################################| 256kB 1.2MB/s Installing collected packages: six, pycparser, cffi, bcrypt, pyasn1, pynacl, enu m34, idna, asn1crypto, ipaddress, cryptography, paramiko Running setup.py install for pycparser ... done Successfully installed asn1crypto-0.24.0 bcrypt-3.1.4 cffi-1.11.5 cryptography-2 .3.1 enum34-1.1.6 idna-2.7 ipaddress-1.0.22 paramiko-2.4.1 pyasn1-0.4.4 pycparse r-2.18 pynacl-1.2.1 six-1.11.0 You are using pip version 9.0.3, however version 18.0 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' comm and. C:\Python27\Scripts>cd .. C:\Python27>python Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:22:17) [MSC v.1500 32 bit (In tel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import paramiko >>> exit() C:\Python27>
2. Install Python 2.7 / 3.0 on AWS EC2 Instance
[[email protected] pexpect-2.3]$ python --version Python 2.7.14
[[email protected] pexpect-2.3]$ sudo yum install python Loaded plugins: priorities, update-motd, upgrade-helper amzn-main | 2.1 kB 00:00:00 amzn-updates | 2.5 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package python26.x86_64 0:2.6.9-2.89.amzn1 will be installed --> Processing Dependency: libpython2.6.so.1.0()(64bit) for package: python26-2.6.9-2.89.amzn1.x86_64 --> Running transaction check ---> Package python26-libs.x86_64 0:2.6.9-2.89.amzn1 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================= Package Arch Version Repository Size ============================================================================================================= Installing: python26 x86_64 2.6.9-2.89.amzn1 amzn-main 5.8 M Installing for dependencies: python26-libs x86_64 2.6.9-2.89.amzn1 amzn-main 697 k Transaction Summary ============================================================================================================= Install 1 Package (+1 Dependent package) Total download size: 6.4 M Installed size: 21 M Is this ok [y/d/N]: ^Cn Exiting on user command Your transaction was saved, rerun it with: yum load-transaction /tmp/yum_save_tx.2018-06-21.18-42.2ccPPk.yumtx
[[email protected] pexpect-2.3]$ python --version Python 2.7.14 [[email protected] pexpect-2.3]$ sudo apt-get install python3 sudo: apt-get: command not found [[email protected] pexpect-2.3]$ sudo yum install python Loaded plugins: priorities, update-motd, upgrade-helper amzn-main | 2.1 kB 00:00:00 amzn-updates | 2.5 kB 00:00:00 Package python26-2.6.9-2.89.amzn1.x86_64 already installed and latest version Nothing to do
[[email protected] pexpect-2.3]$ sudo yum list | grep python3 mod24_wsgi-python34.x86_64 3.5-1.25.amzn1 amzn-updates mod24_wsgi-python35.x86_64 3.5-1.25.amzn1 amzn-updates mod24_wsgi-python36.x86_64 3.5-1.25.amzn1 amzn-updates python34.x86_64 3.4.8-1.39.amzn1 amzn-updates python34-devel.x86_64 3.4.8-1.39.amzn1 amzn-updates python34-docs.noarch 3.4.3-1.23.amzn1 amzn-main python34-libs.i686 3.4.8-1.39.amzn1 amzn-updates python34-libs.x86_64 3.4.8-1.39.amzn1 amzn-updates python34-pip.noarch 9.0.3-1.26.amzn1 amzn-updates python34-setuptools.noarch 36.2.7-1.33.amzn1 amzn-main [[email protected] pexpect-2.3]$ sudo yum install python34 Loaded plugins: priorities, update-motd, upgrade-helper Resolving Dependencies --> Running transaction check ---> Package python34.x86_64 0:3.4.8-1.39.amzn1 will be installed --> Processing Dependency: python34-libs(x86-64) = 3.4.8-1.39.amzn1 for package: python34-3.4.8-1.39.amzn1.x86_64 --> Processing Dependency: libpython3.4m.so.1.0()(64bit) for package: python34-3.4.8-1.39.amzn1.x86_64 --> Running transaction check ---> Package python34-libs.x86_64 0:3.4.8-1.39.amzn1 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================= Package Arch Version Repository Size ============================================================================================================= Installing: python34 x86_64 3.4.8-1.39.amzn1 amzn-updates 54 k Installing for dependencies: python34-libs x86_64 3.4.8-1.39.amzn1 amzn-updates 9.8 M Transaction Summary ============================================================================================================= Install 1 Package (+1 Dependent package) Total download size: 9.8 M Installed size: 27 M Is this ok [y/d/N]: y Downloading packages: (1/2): python34-3.4.8-1.39.amzn1.x86_64.rpm | 54 kB 00:00:00 (2/2): python34-libs-3.4.8-1.39.amzn1.x86_64.rpm | 9.8 MB 00:00:00 ------------------------------------------------------------------------------------------------------------- Total 20 MB/s | 9.8 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : python34-3.4.8-1.39.amzn1.x86_64 1/2 Installing : python34-libs-3.4.8-1.39.amzn1.x86_64 2/2 Verifying : python34-libs-3.4.8-1.39.amzn1.x86_64 1/2 Verifying : python34-3.4.8-1.39.amzn1.x86_64 2/2 Installed: python34.x86_64 0:3.4.8-1.39.amzn1 Dependency Installed: python34-libs.x86_64 0:3.4.8-1.39.amzn1 Complete! [[email protected] pexpect-2.3]$ [[email protected] pexpect-2.3]$ python --version Python 2.7.14 [[email protected] pexpect-2.3]$ python3 --version Python 3.4.8 [[email protected] pexpect-2.3]$
[[email protected] ~]$ python3 Python 3.4.8 (default, Apr 25 2018, 23:50:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> print("Hello World") Hello World >>>
[[email protected] ~]$ sudo yum update Loaded plugins: priorities, update-motd, upgrade-helper amzn-main | 2.1 kB 00:00:00 amzn-updates | 2.5 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package cloud-init.noarch 0:0.7.6-2.15.amzn1 will be updated ---> Package cloud-init.noarch 0:0.7.6-2.16.amzn1 will be an update ---> Package dhclient.x86_64 12:4.1.1-53.P1.27.amzn1 will be updated ---> Package dhclient.x86_64 12:4.1.1-53.P1.28.amzn1 will be an update ---> Package dhcp-common.x86_64 12:4.1.1-53.P1.27.amzn1 will be updated ---> Package dhcp-common.x86_64 12:4.1.1-53.P1.28.amzn1 will be an update ---> Package gnupg2.x86_64 0:2.0.28-1.30.amzn1 will be updated ---> Package gnupg2.x86_64 0:2.0.28-2.31.amzn1 will be an update ---> Package kernel.x86_64 0:4.14.51-60.38.amzn1 will be installed ---> Package kernel-tools.x86_64 0:4.14.47-56.37.amzn1 will be updated ---> Package kernel-tools.x86_64 0:4.14.51-60.38.amzn1 will be an update ---> Package ntp.x86_64 0:4.2.6p5-44.36.amzn1 will be updated ---> Package ntp.x86_64 0:4.2.8p11-2.38.amzn1 will be an update ---> Package ntpdate.x86_64 0:4.2.6p5-44.36.amzn1 will be updated ---> Package ntpdate.x86_64 0:4.2.8p11-2.38.amzn1 will be an update ---> Package openssh.x86_64 0:7.4p1-11.68.amzn1 will be updated ---> Package openssh.x86_64 0:7.4p1-16.69.amzn1 will be an update ---> Package openssh-clients.x86_64 0:7.4p1-11.68.amzn1 will be updated ---> Package openssh-clients.x86_64 0:7.4p1-16.69.amzn1 will be an update ---> Package openssh-server.x86_64 0:7.4p1-11.68.amzn1 will be updated ---> Package openssh-server.x86_64 0:7.4p1-16.69.amzn1 will be an update ---> Package openssl.x86_64 1:1.0.2k-8.107.amzn1 will be updated ---> Package openssl.x86_64 1:1.0.2k-12.109.amzn1 will be an update ---> Package rpcbind.x86_64 0:0.2.0-13.9.amzn1 will be updated ---> Package rpcbind.x86_64 0:0.2.0-13.10.amzn1 will be an update ---> Package wget.x86_64 0:1.18-3.28.amzn1 will be updated ---> Package wget.x86_64 0:1.18-4.29.amzn1 will be an update --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================================== Package Arch Version Repository Size ======================================================================================================================================================================== Installing: kernel x86_64 4.14.51-60.38.amzn1 amzn-updates 21 M Updating: cloud-init noarch 0.7.6-2.16.amzn1 amzn-updates 422 k dhclient x86_64 12:4.1.1-53.P1.28.amzn1 amzn-updates 346 k dhcp-common x86_64 12:4.1.1-53.P1.28.amzn1 amzn-updates 149 k gnupg2 x86_64 2.0.28-2.31.amzn1 amzn-updates 2.6 M kernel-tools x86_64 4.14.51-60.38.amzn1 amzn-updates 124 k ntp x86_64 4.2.8p11-2.38.amzn1 amzn-updates 1.0 M ntpdate x86_64 4.2.8p11-2.38.amzn1 amzn-updates 88 k openssh x86_64 7.4p1-16.69.amzn1 amzn-updates 639 k openssh-clients x86_64 7.4p1-16.69.amzn1 amzn-updates 1.1 M openssh-server x86_64 7.4p1-16.69.amzn1 amzn-updates 511 k openssl x86_64 1:1.0.2k-12.109.amzn1 amzn-updates 1.8 M rpcbind x86_64 0.2.0-13.10.amzn1 amzn-updates 56 k wget x86_64 1.18-4.29.amzn1 amzn-updates 981 k Transaction Summary ======================================================================================================================================================================== Install 1 Package Upgrade 13 Packages Total download size: 31 M Is this ok [y/d/N]: y
3. Use Python Pexpect module to do SSH/FTP connection
[[email protected] ~]$ wget http://pexpect.sourceforge.net/pexpect-2.3.tar.gz --2018-06-21 15:38:31-- http://pexpect.sourceforge.net/pexpect-2.3.tar.gz Resolving pexpect.sourceforge.net (pexpect.sourceforge.net)... 216.105.38.10 Connecting to pexpect.sourceforge.net (pexpect.sourceforge.net)|216.105.38.10|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 150868 (147K) [application/x-gzip] Saving to: ‘pexpect-2.3.tar.gz’ pexpect-2.3.tar.gz 100%[========================================>] 147.33K 680KB/s in 0.2s 2018-06-21 15:38:31 (680 KB/s) - ‘pexpect-2.3.tar.gz’ saved [150868/150868] [[email protected] ~]$ tar xzf pexpect-2.3.tar.gz [[email protected] ~]$ cd pexpect-2.3 [[email protected] pexpect-2.3]$ sudo python ./setup.py install running install running build running build_py creating build creating build/lib copying pexpect.py -> build/lib copying pxssh.py -> build/lib copying fdpexpect.py -> build/lib copying FSM.py -> build/lib copying screen.py -> build/lib copying ANSI.py -> build/lib running install_lib copying build/lib/FSM.py -> /usr/local/lib/python2.7/site-packages copying build/lib/fdpexpect.py -> /usr/local/lib/python2.7/site-packages copying build/lib/pexpect.py -> /usr/local/lib/python2.7/site-packages copying build/lib/ANSI.py -> /usr/local/lib/python2.7/site-packages copying build/lib/pxssh.py -> /usr/local/lib/python2.7/site-packages copying build/lib/screen.py -> /usr/local/lib/python2.7/site-packages byte-compiling /usr/local/lib/python2.7/site-packages/FSM.py to FSM.pyc byte-compiling /usr/local/lib/python2.7/site-packages/fdpexpect.py to fdpexpect.pyc byte-compiling /usr/local/lib/python2.7/site-packages/pexpect.py to pexpect.pyc byte-compiling /usr/local/lib/python2.7/site-packages/ANSI.py to ANSI.pyc byte-compiling /usr/local/lib/python2.7/site-packages/pxssh.py to pxssh.pyc byte-compiling /usr/local/lib/python2.7/site-packages/screen.py to screen.pyc running install_egg_info Writing /usr/local/lib/python2.7/site-packages/pexpect-2.3.egg-info
[[email protected] pexpect-2.3]$ sudo yum install pexpect.noarch Loaded plugins: priorities, update-motd, upgrade-helper amzn-main | 2.1 kB 00:00:00 amzn-updates | 2.5 kB 00:00:00 No package pexpect.noarch available. Error: Nothing to do [[email protected] pexpect-2.3]$ sudo apt-get install python-pexpect sudo: apt-get: command not found [[email protected] pexpect-2.3]$ python Python 2.7.14 (default, May 2 2018, 18:31:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import pexpect
4. Python Script to Execute Cisco Commands on Cisco IOS devices
C:\Python27>type cisco.py
import paramiko from getpass import getpass import time import datetime import sys ip = raw_input("Please enter your IP address: ") username = "admin" password = "[email protected]" f = open('NewdayTest.txt', 'a') old_stdout = sys.stdout sys.stdout = f remote_conn_pre=paramiko.SSHClient() remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy()) remote_conn_pre.connect(ip, port=22, username=username, password=password, look_for_keys=False, allow_agent=False) remote_conn = remote_conn_pre.invoke_shell() output = remote_conn.recv(65535) print('\n\n\n##############################################################\n') print (datetime.datetime.now()) print('\n##############################################################\n') print (output) remote_conn.send("config t\n") time.sleep(.5) output = remote_conn.recv(65535) print (output) remote_conn.send("file prompt quiet\n") time.sleep(.5) output = remote_conn.recv(65535) print (output) remote_conn.send("end\n") time.sleep(.5) output = remote_conn.recv(65535) print (output) remote_conn.send("copy running-config tftp://192.168.2.5/\n") time.sleep(2) stdout = remote_conn.recv(65535) print (stdout) remote_conn.send("config t\n") time.sleep(.5) output = remote_conn.recv(65535) print (output) remote_conn.send("file prompt alert\n") time.sleep(.5) output = remote_conn.recv(65535) print (output) remote_conn.send("exit\n") time.sleep(.5) output = remote_conn.recv(65535) print (output) f.close()
C:\Python27>python cisco.py
C:\Python27>type Newdaytest.txt
##############################################################
2018-08-24 12:38:42.178000
##############################################################
****************************************************************
* This is a private computing facility. *
* Unauthorized use of this device is strictly prohibited. *
* Violators will be prosecuted to the maximum extent possible. *
* *
* TACACS+ Authentication and Accounting are in place. *
* All actions/commands are monitored and recorded. *
* By using the network you expressly consent to such *
* monitoring and recording. *
****************************************************************
SW-FW-MGMT1#config t
Enter configuration commands, one per line. End with CNTL/Z.
SW-FW-MGMT1(config)#
file prompt quiet
SW-FW-MGMT1(config)#
end
SW-FW-MGMT1#
copy running-config tftp://192.168.154.5/
.
.
.