I want to run a command on a ssh-server, but this command is determined by a script on my local machine. How do I do that?
An example for clarity:
I want to write a script here (foo.sh) that takes an argument. If I run ./foo.sh 0
it should somehow send a shutdown signal to the server machine, but if I run ./foo.sh 1
it should send a restart signal.
I know how to manually login via ssh, and I've already set ssh-keys to skip passwords, but I don't know how to automate the procedure with a script.
You can pass a command (or list of commands, separated by
;
or&&
) to a SSH connection like this:If you have a local script that outputs
0
or1
, you can simplify things further:The code in
$(...)
executes before anything else and its output is put into the line dynamically. It's called command substitution.As Oli commented, you can tell SSH to send commands. You could modify your script so that if your command line arg is 1 it sends
ssh user@server "shutdown -h now"
. Keep in mind that you'll have to be superuser on the other machine to shut it down.EDIT: Instead of using root, as is suggested in the comments put
user
into the sudoers file as being able to shut down the machine without a password.You can use runoverssh:
-n
will use SSH default authentication (your keys)-s
runs a local script remotely