maemo.org - Talk

maemo.org - Talk (https://talk.maemo.org/index.php)
-   Maemo 5 / Fremantle (https://talk.maemo.org/forumdisplay.php?f=40)
-   -   Script to open SSH connection and run commands on other Linux device (https://talk.maemo.org/showthread.php?t=39447)

RouterRebooter 2010-01-06 17:16

Script to open SSH connection and run commands on other Linux device
 
Hi!

I use a NSLU2 (NAS-System) which runs linux (debian) with a usb-controlled multiple power socket (Gembird) to control the light in my living-room. Works fine. (At this time I control it with a PHP-based webpage on the NSLU)

Now i want to switch the sockets without this (slow) webpage.
My idea was to create a script which connects via SSH from the N900 to the NSLU and then run the needed commands.

When i connect manually with XTerminal over SSH i get a prompt to enter my password. After this i can run the command.

How can i put this in a script? Is this automation possible with a "password-based-authentication?". Or do i need certificates or something like this for authentication.

My second question: How can is put a link to this script to my "program menu" or to a homescreen.

Thank you!

floffe 2010-01-06 17:22

Re: Script to open SSH connection and run commands on other Linux device
 
For logging in, use public key authentication (google is your friend). It really isn't hard to setup, create a pair of keys and put the public one on server and the private one on the device, plus change a line in the server config.

For executing a command upon login, just use ssh user@host command (so you can create a script on the N900 that logs on to the nslu2 and runs a script to toggle the lights).

RouterRebooter 2010-01-06 17:29

Re: Script to open SSH connection and run commands on other Linux device
 
Thanks for your fast response!

Sounds manageable to use public key authentication. I'll try it!

Do you know wheter it's complicated to add an shortcut or something to the homescreen / menu?

mikhmv 2010-01-06 17:34

Re: Script to open SSH connection and run commands on other Linux device
 
RouterRebooter: Think about n900 like about normal linux machine.

here it is: http://rcsg-gsir.imsb-dsgi.nrc-cnrc....et/node31.html

after this you can use command like this:
ssh username@IPofMachine Commands for execution....

If you need step by step instruction, I can write it in 2 hours (now don't have time)....

brendan 2010-01-06 17:43

Re: Script to open SSH connection and run commands on other Linux device
 
Quote:

Originally Posted by mikhmv (Post 455831)
ssh username@IPofMachine Commands for execution....

this assumes that the "Commands for execution" reside on the remote machine.

RouterRebooter 2010-01-06 17:45

Re: Script to open SSH connection and run commands on other Linux device
 
Quote:

Originally Posted by mikhmv (Post 455831)
RouterRebooter: Think about n900 like about normal linux machine.

Easier said than done ;) I don't have any linux machines (except the NAS-System which i only use for light-control). I'm a linux newbie ;)

I'm pleased about your helpfulness - really great!

I'll try to establish the connection with the method form your link. If I've further questions, i put it in this thread :)

Thanks!

Does anyone know how it's possible to add an shortcut (to run the script on N900) or something to the homescreen / menu?

RouterRebooter 2010-01-06 17:49

Re: Script to open SSH connection and run commands on other Linux device
 
Quote:

Originally Posted by brendan (Post 455845)
this assumes that the "Commands for execution" reside on the remote machine.

This means that i can put the commands to a file at the remote computer (NSLU) and run it via the
"ssh username@192.168.X.X /path/commandfile.*" command?

timwatt 2010-01-06 17:49

Re: Script to open SSH connection and run commands on other Linux device
 
Hi RouterRebooter,
The info to make a desktop icon to run an ssh command can be found in this post:
http://talk.maemo.org/showthread.php?t=35858

I used it to run WOL (an installed app on my Linux device) via SSH. the icon method allows you to run one command. but you can make a script to run many commands. the cool thing is you can also make your own icons too. i am a newbie to Linux and the terminal but with minimal experienced i achieved success. a program i found essential was WinSCP it gives you a windows GUI like file manager to you n900 after you have installed SSH Server.

I had to install a new program on my n900 and restart before my icons showed up. I now have several custom desktop icons that run SSH scripts.

good luck
tim

ps. if you read the whole post i ask all the newbie questions.

RouterRebooter 2010-01-06 17:58

Re: Script to open SSH connection and run commands on other Linux device
 
Quote:

Originally Posted by timwatt (Post 455860)
ps. if you read the whole post i ask all the newbie questions.

Thanks for your reply (and the edit ;)) !

Sounds good! Now i only need time to read and test it - I hope tomorrow ;)

mikhmv 2010-01-06 20:22

Re: Script to open SSH connection and run commands on other Linux device
 
Step by step protocol for create passwordless connection:
Quote:

1. install packages OpenSSH (client, if you want server too) and rootsh on n900.
2. open x-term
3. "sudo gainroot" (or just "root")
4. "ssh-keygen -t rsa" (create keys)
Use everything by default (press enter)
5. $ "cd .ssh" (go to folder .ssh)
6."cp id_rsa.pub N900_id_rsa.pub". it make copy key file to N900_id_rsa.pub. You can use any name. It is helpful if you have many servers.
7. "scp N900_id_rsa.pub ServerUserName@IPofServer:/PathToUserHomeOnServer/.ssh/" If you are going to connect like root it will be:
"scp N900_id_rsa.pub root@IPofServer:/root/.ssh/". you will be asked for password. it will copy your password file on server
8. "ssh ServerUserName@IPofServer". Connect on server. You will be in home folder of User
9. "cd .ssh" Go to folder .ssh. For root it will be /root/.ssh
10. "ls" Get list of files in folder. You should look for "authorized_keys" or "authorized_keys2" file. I don't know why but some servers have "authorized_keys2" file by default. It is not necessary to exist.
11. "cat N900_id_rsa.pub >> authorized_keys". this will attach text from N900_id_rsa.pub file to the end of authorized_keys. If in previous step you find file "authorized_keys2" you should use "cat N900_id_rsa.pub >> authorized_keys2".
12. "exit". Disconnect
13. "ssh ServerUserName@IPofServer" You should connect to server without password. If you asked for password that mean something wrong here.
Create script:
Quote:

1. Open any text redactor which can save text "ascii" files. on n900 it could be "leafpad" (starting from menu) or "nano" and "vi"(for x-term). You should install packages before. I personally more prefer nano. But you can use windows Notepad.
2. put first line "#!/bin/sh"
3. Add all commands which you type in terminal when connected to server.
4. Save file like "ascii" for example it will have name: "commandsFile"
5. open x-terminal
6. "scp commandsFile ServerUserName@IPofServer:/usernameHomeFolder/" for root it will be "scp commandsFile root@IPofServer:/root/". this will copy you file to server. Should be without Password (if you copy from device which you used in "protocol for create passwordless connection")!!! If you use other user than root probably will be better to store this file in "/usr/bin" but it is on your choice....
7. "ssh UserName@IPofServer chmod ug+x /usernameHomeFolder/commandsFile" Make this file executable.

For running this script you should use:
"ssh UserName@IPofServer /PathToFile/commandsFile"
P.S. how to find new information for n900 you can google it! in this case: "passwordless login linux". In most of cases it will work for n900 except missing some packages. If you will need porting some packages from other distribution (like debian) you can make request for porting here, on forum. Most of packages (for command line execution) can be easily ported.

RouterRebooter 2010-01-06 21:29

Re: Script to open SSH connection and run commands on other Linux device
 
Wow!

Thank you very much for your help - I'll try it tomorrow!

TA-t3 2010-01-07 11:37

Re: Script to open SSH connection and run commands on other Linux device
 
Note that you don't need to be ROOT to do this. Creating an authorized key is something that you do on an account-by-account basis.

This is how I do it for my linux systems:
Code:

[Log in as myself, on my local machine]
ssh-keygen -r rsa -N ''
[press return for default options]
cat .ssh/id_rsa.pub | ssh -l remote_account remote_computer "cat >> .ssh/authorized_keys"
[answer password question]
ssh -l remote_account remote_computer date

The last command should provide 'date' output without asking for password. If it still does, then check directory permissions of remote home directory and remote $HOME/.ssh directory. No group or world writeability, please. Check again, fix, until you don't have to enter the password anymore.

The above works fine, as long as there actually is an .ssh directory in the remote location account. That'll be the case if you sometime in the past used an ssh command on that remote account.
(Note that '-l user host' is equivalent with 'user@host' as far as ssh is concerned.)

If the 'date' command works then you should be able to put ssh commands into a local script. Make sure that commands you pass to the remote computer are available there on that remote computer.

NB: There is no reason to involve the root account in this.

RouterRebooter 2010-01-08 14:13

Re: Script to open SSH connection and run commands on other Linux device
 
Yesterday i had time to try it.
After a few problems (file-permissions) it worked well :)
Now I can switch the lights in my living room from all over the world with my N900 ;)

(I know - "who needs?" - but it's very funny :D)

Thanks to all!

salle74 2010-01-20 13:04

Re: Script to open SSH connection and run commands on other Linux device
 
Quote:

Originally Posted by timwatt (Post 455860)
Hi RouterRebooter,
The info to make a desktop icon to run an ssh command can be found in this post:
http://talk.maemo.org/showthread.php?t=35858

I used it to run WOL (an installed app on my Linux device) via SSH. the icon method allows you to run one command. but you can make a script to run many commands. the cool thing is you can also make your own icons too. i am a newbie to Linux and the terminal but with minimal experienced i achieved success. a program i found essential was WinSCP it gives you a windows GUI like file manager to you n900 after you have installed SSH Server.

I had to install a new program on my n900 and restart before my icons showed up. I now have several custom desktop icons that run SSH scripts.

good luck
tim

ps. if you read the whole post i ask all the newbie questions.

How does your code look like, i have placed a shortcut on the desktop but nothing happens when i click it?

timwatt 2010-01-21 16:12

Re: Script to open SSH connection and run commands on other Linux device
 
Code:

[Desktop Entry]
Encoding=UTF-8
Version=0.1
Name=SSH
Terminal=true
Type=Application
Exec=/usr/bin/osso-xterm 'ssh -l root -L 3389:192.168.5.555:3389 me.tzo.com -p 22'
Icon=ssh
X-Osso-Type=application/x-executable

code above in ssh.desktop file
in "/usr/share/applications/hildon/"

I haven't had time to program a script yet so it just doe one ssh tunnel

the icons below are placed in "/usr/share/icons/hicolor/scalable/hildon/"

http://www.jdidesign.com/files-in/rdp.png
http://www.jdidesign.com/files-in/ssh.png

no mercy 2010-01-22 11:09

Re: Script to open SSH connection and run commands on other Linux device
 
i want to turn on / off wifi (router)

i cant get this working with the .desktop file

Code:

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=WirelessOff
Exec=/bin/busybox sh -c 'ssh root@xxx.xxx.xxx.xxx wl radio off'
Icon=ssh
Type=Application

this didnt work.

open gainrooted xterm and type
Code:

ssh root@xxx.xxx.xxx.xxx wl radio off
works well.

whats wrong?



anybody have nice icons for wifi on / off ? :D

timwatt 2010-01-22 18:31

Re: Script to open SSH connection and run commands on other Linux device
 
I am no Linux guru but i run an ssh command on my router by executing the flowing command from withing the xxx.desktop file
Code:

Exec=/usr/bin/osso-xterm 'ssh -l root myip.com -p 22 /usr/sbin/wol -i 192.100.1.255 00:X3:18:F1:86:A1'
I think that means use xTerminal
myip.com = router address.

the ssh command i would run from xterminal

this is the path to the command on my router

so if i had to guess this is what your command should look like:

Code:

Exec=/usr/bin/osso-xterm 'ssh root@xxx.xxx.xxx.xxx wl radio off'
and to do it over the web:
Code:

Exec=/usr/bin/osso-xterm 'ssh router.ip.com -p 22 root@xxx.xxx.xxx.xxx wl radio off'
or

Code:

Exec=/usr/bin/osso-xterm 'ssh -l root router.ip.com -p 22 root@xxx.xxx.xxx.xxx wl radio off'
but then again i have no Linux experience so more than that I cant help.

Shanezlar 2010-01-22 18:55

Re: Script to open SSH connection and run commands on other Linux device
 
btw: ssh-copy-id is available on the N900 for copying your public key to a remote machine easily

shortens the whole setup to:
Code:

ssh-keygen
ssh-copy-id user@host

You can then login passwordlessly with "ssh user@host"

no mercy 2010-01-22 19:11

Re: Script to open SSH connection and run commands on other Linux device
 
thanks ;)

i found a solution myself ( thanks to subcore)

i had to make the ssh-keygen command with normal "user" xterm and not "root". this is the solution because its harder to start xterm with root rights and ssh and the wl radio off command.

now everything works well ;)


now i only need some nice wlan on / off icons :D but i cant find icons :-(

timwatt 2010-01-23 01:53

Re: Script to open SSH connection and run commands on other Linux device
 
here are 2 icons i made from the first google wlan image that popped up.

http://www.jdidesign.com/files-in/maemo/wlan-off.png
http://www.jdidesign.com/files-in/maemo/wlan-on.png


All times are GMT. The time now is 10:07.

vBulletin® Version 3.8.8