# Ansibleconnect - connect to all hosts from the inventory with one command
Ansible Version | CI Status
---------|:---------
2.5 | [](https://travis-ci.com/psykulsk/ansibleconnect)
2.6 | [](https://travis-ci.com/psykulsk/ansibleconnect)
2.7 | [](https://travis-ci.com/psykulsk/ansibleconnect)
2.8 | [](https://travis-ci.com/psykulsk/ansibleconnect)
2.9 | [](https://travis-ci.com/psykulsk/ansibleconnect)
## SSH into all hosts in your inventory with one command.
Ansibleconnect creates a bash script based on your ansible inventory.
That script will create a new tmux window or session and create a separate pane
for each one of your 'sshable' inventory hosts. Inside of each of the
panes an ssh connection to the pane's host will be established.

### Setup example (on Ubuntu):
```
sudo apt install tmux
sudo apt install sshpass
pip install ansibleconnect
```
### Usage examples:
Connect to all hosts in inventory:
```
source <(ansibleconnect -i inventory.yml)
```
Connect to all hosts from group1 and group2:
```
source <(ansibleconnect -i inventory.yml -g 'group1:group2')
```
Connect to all hosts from group1 except for hosts that are also in group2:
```
source <(ansibleconnect -i inventory.yml -g 'group1:!group2')
```
Connect to all hosts from inventory except for hosts in group1:
```
source <(ansibleconnect -i inventory.yml -g '!group1')
```
Connect to all hosts that have AWS provider:
```
source <(ansibleconnect -i inventory.yml -vars provider:aws)>
```
**NOTE:** In case you don't use bash. You can also use *eval* command, for example:
```
eval "$(ansibleconnect -i inventories/inventory.yml)"
```
#### Possible flags
* `-i`, `--inventory` - Path to ansible inventory
* `-g`, `--groups` - Inventory groups of hosts to connect to (multiple groups should be concentrated with *:*. *!* in front of group name means that ansibleconnect should not connect to hosts form this group). Example: `-g computes:!storage`
* `--hosts` - List of hostnames to connect to. Example: `--hosts hostA,hostB`
* `-vars`, `--variables` - Variables that host should have defined in inventory to connect to it. Accepted format: *key:value* in case where host should have variable with specific value or *key* in case where host should have defined variable no matter what value. Example: `-v type:dev,team:ui`
* `-novars`, `--no-variables` - Variables that host should not have defined in inventory to connect to it. Accepted format: *key:value* in case where host should not have variable with specific value or *key* in case where host should not have defined variable no matter what value.Example: `-novars type:prod,team:sales`
#### Configuration
Ansibleconnect looks for the `ansible.cfg` file in the same locations as ansible.
### Authentication
#### ssh-agent
For authentication one can use ssh keys. `ansibleconnect` will scan the inventory file for connection options (`ansible_ssh_common_args`, `ansible_ssh_user`, `ansible_host`, `ansible_private_key_file`, etc.). Ssh keys can be passed via them. Otherwise, one can use the `ssh-agent` tool. Environment args (`SSH_AGENT_PID` and `SSH_AUTH_SOCK`) will be passed to each one of the tmux shells.
##### ssh-agent setup example
```
eval $(ssh-agent)
ssh-add ~/.ssh/my_private_key.pem
```
#### sshpass
If `ansible_ssh_pass` variable is used in the inventory, one should install the `sshpass` and make it discoverable via `PATH`. Please note that when using the sshpass, password will passed in plaintext and it will be saved in each of the tmux shells' history.