I am trying to learn Python as I think it will be good for my day job. I bought a couple of books, but I am someone that learns by doing. I found some good scripts out on the internet that I wanted to modify and make use of. However I am also a mac user and so I wanted to be able to run these scripts on my Mac so that when I wanted I could run them from where ever I might be. I do on occasion travel to sites and do some extra curricular activities that might require this ability. So the mac has Python pre installed, it’s version 2.7.5, which seemed sufficient for my needs and what I wanted to do. The script I wanted to play with needed the paramiko module. I was able to download it and extract from here:
That was easy, however to install it said if I had setuptools would be best. So I found this site:
And was able to find a command to download and install setuptools.
***Make sure you are root, you will have a much better time of it.***
curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -o – | python
So that installed correctly, however when I went into python and did an “import paramiko” I was told I needed a crypto module. I then went out and found this:
Downloaded it and of course I couldn’t use setuptools for it, it needed to be built and then installed. So that required me to get Xcode 5.1 for the cc compiler and load that on my machine. That was straight forward enough. So after the Xcode install I then ran:
python setup.py build
But I was getting this error:
error: command ‘cc’ failed with exit status 1
Turns out there is an issue with Python and Xcode 5.1. The fix for that is to run the following before doing the build and install:
Once that is done you can then go into the pcrypto folder and run:
python setup.py build
python setup.py install
Now you have everything you need to use paramiko to ssh into a cisco device from a mac and run some commands or do whatever it is you want.
I did find one other thing that is needed and that was as part of the connect string for paramiko, I needed to specify “allow_agent=False,look_for_keys=False” as part of the string. If I didn’t then I was getting password errors on the cisco switch I was testing with.
ssh.connect(‘x.x.x.x’, username=’name’, password=’password’, allow_agent=False,look_for_keys=False)
All in all it was a very educational day and I think some hours well spent. I am now going to take my scripts and look to put everything into variables and also specify some lists so I can run it against multiple machines.