Pythonic remote commands via ssh
Project description
budgie
======
[![Build Status](https://travis-ci.org/puredistortion/budgie.png?branch=master)](https://travis-ci.org/puredistortion/budgie)
A pythonic remote control of servers via ssh
Installation
------------
Install the library
virtualenv venv && . venv/bin/activate # optional
pip install sh
wget https://raw2.github.com/puredistortion/budgie/master/budgie.py
You need to configure passwordless SSH for your remote hosts:
ssh-keygen -q -t rsa -N 'your_password_here' -f ~/.ssh/id_rsa
ssh-copy-id localhost # Repeat this for each host
eval `ssh-agent`
ssh-add
ssh localhost pwd # test connection
Next, create an SSH config file in `~/.ssh/config` describing your hosts:
Host localhost
User user
HostName localhost
IdentityFile ~/.ssh/id_rsa.key
Host osx
User user
HostName steve-mac
IdentityFile ~/.ssh/id_rsa.key
Host projects
User user
HostName 192.168.1.30
IdentityFile ~/.ssh/projects.key
Host prod
User produser
HostName prod.example.com
IdentityFile ~/.ssh/deploy.key
Usage
-----
Now you can run remote commands using simple python code
from budgie import localhost
print localhost.hostname(), localhost.uptime()
localhost.touch('/tmp/latest')
You can also callhosts ing this alternate method if the magic above is to much
import budgie
print budgie.ssh('localhost'), budgie.ssh('localhost').uptime()
budgie.ssh('localhost').touch('/tmp/latest')
Passing in SSH Options
----------------------
budgie will allow the passing in of SSH options. At this time this is done through the bake method in the same way you would pass this into the sh.ssh()
budgie.localhost.bake('-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no').whoami()
or
budgie.ssh().bake('-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no', '127.0.0.1').whoami()
This does need to be cleaned up to make more logical sense.
Using Sudo
----------
Just as in sh sudo is just treated as another budgie command.
So executing a remote command is as simple as:
budgie.localhost.sudo.cat('/etc/hosts')
You will need to ensure that sudo is either allowing the remote user you connect with to exec the command via /etc/sudoers
Budgie Host Groups
-----------------
budgie offers the ability to bundle ssh hosts for batch command execution. This is done through creating a host group. A host group will take in a list of host names or budgie.ssh instances.
web_servers = budgie.HostGroup()
web_servers.add('www1.example.com')
web_servers.add('www2.example.com')
webservers.add(['www1.example.com', 'www2.example.com'])
www1 = budgie.ssh('www1.example.com')
www2 = budgie.ssh('www2.example.com')
webservers.add([www1, www2])
or
web_servers.HostGroup(['www1.example.com', 'www2.example.com'])
www1 = budgie.ssh('www1.example.com')
www2 = budgie.ssh('www2.example.com')
web_servers.HostGroup([www1, www2])
Once a budgie.HostGroup() is created it can be intereacted with like a standard dictionary.
Commands can be executed against the host group and results of execution will be supplied back as a dictionary
result = web_servers.whoami()
Result would contain
{'www1': 'www1.example.com', 'www2': 'www2.example.com'}
Running Tests
-------------
`tests.py` can be called via the commandlime and is run on each commit through Travis CIq
Tests can be called by running
python tests.py
This is the current test suite being applied to builds
*Import Test
*Direct Call Goes to Exception Test
*Command Execution (whoami) Test
*HostGroup Creation
*HostGroup Manipulation (add, remove)
*HostGroup Command Execution (whoami) Test
Command execution test uses SSH options that allow for the automatic generation of SSH keypairs and discarding them from known hosts at the conclusion of the connection.
======
[![Build Status](https://travis-ci.org/puredistortion/budgie.png?branch=master)](https://travis-ci.org/puredistortion/budgie)
A pythonic remote control of servers via ssh
Installation
------------
Install the library
virtualenv venv && . venv/bin/activate # optional
pip install sh
wget https://raw2.github.com/puredistortion/budgie/master/budgie.py
You need to configure passwordless SSH for your remote hosts:
ssh-keygen -q -t rsa -N 'your_password_here' -f ~/.ssh/id_rsa
ssh-copy-id localhost # Repeat this for each host
eval `ssh-agent`
ssh-add
ssh localhost pwd # test connection
Next, create an SSH config file in `~/.ssh/config` describing your hosts:
Host localhost
User user
HostName localhost
IdentityFile ~/.ssh/id_rsa.key
Host osx
User user
HostName steve-mac
IdentityFile ~/.ssh/id_rsa.key
Host projects
User user
HostName 192.168.1.30
IdentityFile ~/.ssh/projects.key
Host prod
User produser
HostName prod.example.com
IdentityFile ~/.ssh/deploy.key
Usage
-----
Now you can run remote commands using simple python code
from budgie import localhost
print localhost.hostname(), localhost.uptime()
localhost.touch('/tmp/latest')
You can also callhosts ing this alternate method if the magic above is to much
import budgie
print budgie.ssh('localhost'), budgie.ssh('localhost').uptime()
budgie.ssh('localhost').touch('/tmp/latest')
Passing in SSH Options
----------------------
budgie will allow the passing in of SSH options. At this time this is done through the bake method in the same way you would pass this into the sh.ssh()
budgie.localhost.bake('-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no').whoami()
or
budgie.ssh().bake('-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no', '127.0.0.1').whoami()
This does need to be cleaned up to make more logical sense.
Using Sudo
----------
Just as in sh sudo is just treated as another budgie command.
So executing a remote command is as simple as:
budgie.localhost.sudo.cat('/etc/hosts')
You will need to ensure that sudo is either allowing the remote user you connect with to exec the command via /etc/sudoers
Budgie Host Groups
-----------------
budgie offers the ability to bundle ssh hosts for batch command execution. This is done through creating a host group. A host group will take in a list of host names or budgie.ssh instances.
web_servers = budgie.HostGroup()
web_servers.add('www1.example.com')
web_servers.add('www2.example.com')
webservers.add(['www1.example.com', 'www2.example.com'])
www1 = budgie.ssh('www1.example.com')
www2 = budgie.ssh('www2.example.com')
webservers.add([www1, www2])
or
web_servers.HostGroup(['www1.example.com', 'www2.example.com'])
www1 = budgie.ssh('www1.example.com')
www2 = budgie.ssh('www2.example.com')
web_servers.HostGroup([www1, www2])
Once a budgie.HostGroup() is created it can be intereacted with like a standard dictionary.
Commands can be executed against the host group and results of execution will be supplied back as a dictionary
result = web_servers.whoami()
Result would contain
{'www1': 'www1.example.com', 'www2': 'www2.example.com'}
Running Tests
-------------
`tests.py` can be called via the commandlime and is run on each commit through Travis CIq
Tests can be called by running
python tests.py
This is the current test suite being applied to builds
*Import Test
*Direct Call Goes to Exception Test
*Command Execution (whoami) Test
*HostGroup Creation
*HostGroup Manipulation (add, remove)
*HostGroup Command Execution (whoami) Test
Command execution test uses SSH options that allow for the automatic generation of SSH keypairs and discarding them from known hosts at the conclusion of the connection.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
budgie-0.1.tar.gz
(5.1 kB
view details)
File details
Details for the file budgie-0.1.tar.gz
.
File metadata
- Download URL: budgie-0.1.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 154ce1bc2bdb8492247daf33b7eda15655072ac3debc56dcac393897374afb33 |
|
MD5 | a35621b62b9627eab94a75a29df43b1d |
|
BLAKE2b-256 | e80267e8aa454764f54de6e5af8409accbd9346107675b8a4fcec059adbf345f |