ssh root@server2 "sync; sync; /sbin/shutdown -h now"
How do I run multiple commands in bash on a remote Unix or Linux server? What is the best way to SSH in and run various unix commands in a bash shell?
There are various ways to run multiple commands on a remote Unix server. The syntax is as follows:
Simple bash syntax to run multiple commands on remote machine
Simply run command2 if command1 successful on a remote host called foo
$ ssh bar@foo "command1 && command2"
Run date and hostname commands:
$ ssh user@host "date && hostname"
You can run sudo command as follows on a remote box called server1.cyberciti.biz:
$ ssh -t email@example.com "sudo /sbin/shutdown -h now"
$ ssh firstname.lastname@example.org "sync && sync && /sbin/shutdown -h now"
Bash here document syntax
The here document syntax tells the shell to read input from the current source (HERE) until a line containing only word (HERE) is seen:
ssh server1 << HERE command1 command2 HERE
Here is another example to run a multiple commands on a remote system:
ssh email@example.com << EOF date hostname cat /etc/resolv.conf EOF
With sudo command type:
ssh -t firstname.lastname@example.org << EOF sync sync sudo /sbin/shutdown -h 0 EOF
Pipe script to a remote server
Finally, create a script called “remote-box-commands.bash” as follows on your local server:
date hostname cat /etc/resolv.conf
Run it as follows on a remote server called nas02nixcrafthomeserver:
$ cat remote-box-commands.bash | ssh user@nas02nixcrafthomeserver
cat remote-box-commands.bash | ssh -t vivek@nas02nixcrafthomeserver
Please note that the -t option will get rid of “Sorry, you must have a tty to run sudo/insert your-command-here” error message. You can also use pssh (parallel ssh) for executing ssh in parallel on a number of Linux/Unix/BSD servers. For more info see your ssh and bash command man page:
$ man ssh
$ man bash
$ man sudo
A better option is to use the ansible tool.