Here is a few different ways to quickly perform a specific activity such as file copy, system updates, gather reports etc on hosts, remotely.
SSH allows you to run multiple commands seperated by a semicolon.
Example, ssh host-name ‘date;hostname;pwd’
However, in case there is a need to use loops or conditional statements, heredoc can be used since it enables us to run multiple commands remotely and to redirect the output on the local machine.
#!/bin/sh for i in `cat serverlist`;do echo $i ssh -T -o NumberOfPasswordPrompts=1 username@$i >> server_output 2>&1 <<'EOF' uname -a EOF echo "-----------------------" done >> server_output
(More details on PSSH can be found at pypi.python.org/pypi/pssh/2.3.1)
$ pssh -h serverlist -i -A sudo 'uname -a'
-A --askpass Prompt for a password and pass it to ssh. The password may be used for either to unlock a key or for password authentication. The password is transferred in a fairly secure manner (e.g., it will not show up in argument lists). However, be aware that a root user on your system could potentially intercept the password. -i --inline Display standard output and standard error as each host completes.
NOTE: on some servers if you’re running with sudo, it may return a ‘require TTY’ message (an enforcement that can be changed on sudoers file on the remote system).
(More details on Ansible can be found at (docs.ansible.com)
$ ansible -i serverlist all -s -k -K -m shell -a "uname -a"
-i PATH, --inventory=PATH The PATH to the inventory, which defaults to /etc/ansible/hosts. Alternatively you can use a comma separated list of hosts or single host with trailing comma host,. -S, --su Run operations with su (deprecated, use become). -s, --sudo Run the command as the user given by -u and sudo to root (deprecated, use become). -b, --become Use privilege escalation (specific one depends on become_method), this does not imply prompting for passwords. -K, --ask-become-pass Ask for privilege escalation password. -k, --ask-pass Prompt for the connection password, if it is needed for the transport used. For example, using ssh and not having a key-based authentication with ssh-agent.
Create playbook in -> /etc/ansible/playbooks/yourplaybook
A typical playbook would be of the following format:
--- - hosts: "{{hosts}}" gather_facts: no tasks: - name: Run Local script Remotely as ROOT script: /path/to/script.sh become: true become_method: sudo
$ ansible-playbook /path/to/ansible/playbook -i /path/to/serverlist -s -k -K -e hosts=all