How could I shutdown a remote host, in my network thru ssh, with a local host?

30,382

For the following I am assuming that the user you are going to use in remote-host is the same you use in local-host.

In order to do what you want, you have to first authorize your local-host to connect to you remote-host with no password. To do that you have to (as described here):

  1. Install ssh:

    sudo apt-get install ssh
    
  2. Create public and private keys using ssh-key-gen on local-host by entering this command in your localhost:

    ssh-keygen
    

    You should save the generated key in:

    /home/yourusername/.ssh/id_rsa
    

    Press enter twice to leave the passphrase empty.

    Your identification has been saved in /home/yourusername/.ssh/id_rsa.
    Your public key has been saved in /home/yourusername/.ssh/id_rsa.pub.
    The key fingerprint is:
    XX:XX:XX:xX:XX:xX:XX:XX:XX:XX:XX:XX:XX:XX yourusername@local-host
    
  3. Copy the public key to the remote-host using ssh-copy-id:

    yourusername@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host
    yourusername@remote-host's password:
    
    Now try logging into the machine, with:
    
    ssh remote-host
    

    and check in .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.

    Note: ssh-copy-id appends the keys to the remote-host’s /home/yourusername/.ssh/authorized_key.

  4. Login to remote-host without entering the password:

    ssh remote-host
    yourusername@remote-host:~$
    

    Access to remote-host with no password. Success!

Now you have to be able to execute sudo shutdown -P 0 with no password. You can do that by modifying /etc/sudoers on remote-host with visudo. That way, user yourusername can execute the shutdown command with no password asked.

  1. Login to the remote-host:

    ssh remote.host
    
  2. Run:

    sudo visudo
    

    By running visudo, you edit /etc/sudoers in a safe manner.

  3. Add this line to the file:

    yourusername ALL = NOPASSWD: /sbin/shutdown
    
  4. After doing that, get back to your local-host, create a new empty file and paste this line, modifying the remote-host's name:

    ssh remote.host sudo shutdown -P 0
    
  5. Save and close the file, right-click on it to go to its PropertiesPermissions, and tick Execute this file as a program.

Script done!

Share:
30,382

Related videos on Youtube

DeLiK
Author by

DeLiK

Updated on September 18, 2022

Comments

  • DeLiK
    DeLiK over 1 year

    The question is simple.
    What would be the script I would have to use to shut down a computer in my network thru ssh.

    Normaly i would go to command line and:

    ssh desktop
    
    delik@desktop's password: 
    
    delik@desktop:~$ sudo shutdown -P 0
    

    To power on I created a file and wrote:

    wakeonlan xx:xx:xx:xx:xx:xx
    

    And gave it the executable bit

    That way to power on it requires only a double click. Would i be capable of doing the same to shutdown?

  • DeLiK
    DeLiK over 11 years
    Would you improve your answer with some examples on how to do that exactly?
  • mene
    mene over 11 years
    You can check this out for the login part: thegeekstuff.com/2008/11/… You can use usermod -s /home/username/myscript.sh username to change the default shell. The script should be something like #!/bin/bash shutdown -P now
  • DeLiK
    DeLiK over 11 years
    You are right, the ssh login problem is solved, but now I have to build a script with a "pause" so it waits for ssh desktop to happen succesfully. And after that i have another problem how to give the command in sudo and enter the password?
  • DeLiK
    DeLiK over 11 years
    I manage to do that. Now I can shut down with sudo shutdown -P 0 with no password
  • Peachy
    Peachy over 11 years
    @mene, would you consider editing your answer to add the details you posted as comments? That way, your answer will be clear, complete and useful to other users.
  • Kevin Vella
    Kevin Vella about 3 years
    Just what I needed, thanks a lot!