8

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.

3 Answers 3

11

You can pass a command (or list of commands, separated by ; or &&) to a SSH connection like this:

ssh user@server-address "./foo 1"

If you have a local script that outputs 0 or 1, you can simplify things further:

ssh user@server-address "./foo $(/path/to/your/local/script)"

The code in $(...) executes before anything else and its output is put into the line dynamically. It's called command substitution.

7

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.

3
  • 1
    Logging remotely with root enabled is not recommended. Instead he should to setup the sudoers file to be able to execute the shutdown command without requiring a password. Dec 3, 2010 at 15:46
  • 1
    Not quite true. They just have to be in the sudoers file as a user who can issue a shutdown without a password prompt. Not too hard to implement.
    – Oli
    Dec 3, 2010 at 15:47
  • The shutdown was really just an example, you can change "root" to "user", just to make sure less knowledgeable readers don't try to remotely login as root.
    – Malabarba
    Dec 3, 2010 at 16:44
2

You can use runoverssh:

sudo apt install runoverssh
runoverssh -n -s localscript.sh user host

-n will use SSH default authentication (your keys)
-s runs a local script remotely

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .