Page 1 of 1

how to use SSH to send any command to a unix box

PostPosted: Sun Oct 07, 2018 3:02 pm
by kw123
put this into action/ server script
Code: Select all
##### put me into an action  action window/server/execute script
import subprocess

userID         = "the userid on the unixbox"
password       = "the password on the unix box"
ipNumber       = "192.168.1.xxx"
promptOnServer = "the prompt on the unix box eg @"
cmd            = "ls -l"  ## the command you like to send
file           = "/users/your-mac-id-here/documents/ssh.cmd"


f=open(file,"w")
f.write('spawn  ssh '+userID+'@'+ipNumber+'\n'
   +'set timeout 10\n'
   +'   expect {\n'
   +'   "(yes/no)?" {\n'
   +'   send "yes\\n"\n'
   +'   sleep 0.1\n'
   +'   expect "assword" { send "'+password+'\\n"}\n'
   +'      }\n'
   +'      "assword: " {\n'
   +'          send "'+password+'\\n"\n'
   +'      }\n'
   +'}\n'
   +'expect '+ promptOnServer+'\n'
   +'sleep 0.1\n'
   +'send "'+cmd+' \\n"\n'
   +'sleep 0.1\n'
   +'expect '+ promptOnServer+'\n'
   +'sleep 0.1\n'
   +'send "exit\\n"\n'
   +'expect eof\n'
   )
f.close()


###### either
## if you want to wait for the result:
ret = subprocess.Popen("/usr/bin/expect "+ file, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).communicate()
indigo.server.log(unicode(ret))

###### or
## if it takes to long ( > 10 secs)  just add   & to the end
## subprocess.Popen("/usr/bin/expect "+ file+" &", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)


hope some might find this useful

Karl

Re: how to use SSH to send any command to a unix box

PostPosted: Mon Oct 15, 2018 9:23 am
by mundmc
Thanks Karl, This looks incredibly powerful.


Sent from my iPhone using Tapatalk

Re: how to use SSH to send any command to a unix box

PostPosted: Mon Feb 11, 2019 8:17 pm
by mundmc
Karl,
I finally tried to play with this on a raspi on Debian linux. Will this strictly only work on Unix? I am seeing the login info from the raspi, but it is then timing out. I am trying to tell firefox on a remote pi to open a window using a command that works from ssh.

Edit: I changed "assword" to "password".

Re: how to use SSH to send any command to a unix box

PostPosted: Tue Feb 12, 2019 1:15 am
by kw123
Leave assword. As sometimes it is Password and sometimes password

Which Unix. It depends on the prompts

It will not work on windows.


Sent from my iPhone using Tapatalk

Re: how to use SSH to send any command to a unix box

PostPosted: Tue Feb 12, 2019 11:49 am
by kw123
try:
expect -D ...
or -d
'that gives you a trace


do
man expect
on the unix prompt

for everything you always wanted to know

and expect has to run on the host from where you launch it.- does not need to be available on the target .. = does not use it

Karl

Re: how to use SSH to send any command to a unix box

PostPosted: Wed Feb 13, 2019 7:34 am
by mundmc
kw123 wrote:
Leave assword. As sometimes it is Password and sometimes password

Which Unix. It depends on the prompts

It will not work on windows.


Sent from my iPhone using Tapatalk


Lol, assword it is!


MunDMC
Fitter. Happier. More productive.

Re: how to use SSH to send any command to a unix box

PostPosted: Wed Feb 13, 2019 7:36 am
by mundmc
kw123 wrote:
try:
expect -D ...
or -d
'that gives you a trace


do
man expect
on the unix prompt

for everything you always wanted to know

and expect has to run on the host from where you launch it.- does not need to be available on the target .. = does not use it

Karl


I’m sorry, Karl, but in reference to the lines above, am i putting them into the script (and, if so, where)?


MunDMC
Fitter. Happier. More productive.

Re: how to use SSH to send any command to a unix box

PostPosted: Wed Feb 13, 2019 8:27 am
by kw123
Open a terminal on your mac

man expect

q to exit

expect -d your script name here



Sent from my iPhone using Tapatalk

Re: how to use SSH to send any command to a unix box

PostPosted: Wed Feb 13, 2019 5:12 pm
by kw123
to get the full debug into the logfile from within indigo action:

Code: Select all
##### put me into an action  action window/server/execute script
import subprocess

userID         = "the userid on the unixbox"
password       = "the password on the unix box"
ipNumber       = "192.168.1.xxx"
promptOnServer = "the prompt on the unix box eg @"
cmd            = "ls -l"  ## the command you like to send
file           = "/users/your-mac-id-here/documents/ssh.cmd"


f=open(file,"w")
f.write('spawn  ssh '+userID+'@'+ipNumber+'\n'
   +'set timeout 10\n'
   +'   expect {\n'
   +'   "(yes/no)?" {\n'
   +'   send "yes\\n"\n'
   +'   sleep 0.1\n'
   +'   expect "assword" { send "'+password+'\\n"}\n'
   +'      }\n'
   +'      "assword: " {\n'
   +'          send "'+password+'\\n"\n'
   +'      }\n'
   +'}\n'
   +'expect '+ promptOnServer+'\n'
   +'sleep 0.1\n'
   +'send "'+cmd+' \\n"\n'
   +'sleep 0.1\n'
   +'expect '+ promptOnServer+'\n'
   +'sleep 0.1\n'
   +'send "exit\\n"\n'
   +'expect eof\n'
   )
f.close()


ret = subprocess.Popen("/usr/bin/expect -d "+ file, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).communicate()
indigo.server.log(unicode(ret))

add >> -d  << with the spaces

lower case d not D

you should then see:
[code]MacPro-2012:~ karlwachs$ /usr/bin/expect -d '....

argv[0] = /usr/bin/expect  argv[1] = -d  argv[2] = ...

set argc 8
set argv0 "...
set argv ...
executing commands from command file ....
spawn sftp -o ConnectTimeout=15 pi@192.168.xxx
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {35747}

expect: does "" (spawn_id exp6) match glob pattern "(yes/no)? "? no
"assword"? no
pi@192.168.1.39's password:
expect: does "pi@192.168.1.39's password: " (spawn_id exp6) match glob pattern "(yes/no)? "? no
"assword"? yes
expect: set expect_out(0,string) "assword"
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "pi@192.168.1.xxx's password"
send: sending "xxxxxx\r" to { exp6 }
....

... and many more lines
but w/o the line brakes instead you will see \n where the line breaks should be..

Karl

how to use SSH to send any command to a unix box

PostPosted: Wed Feb 13, 2019 8:54 pm
by mundmc
Karl you are my Indigo spirit totem animal.


MunDMC
Fitter. Happier. More productive.

Re: how to use SSH to send any command to a unix box

PostPosted: Wed Feb 13, 2019 9:10 pm
by kw123
Is there an emoji for that?


Sent from my iPhone using Tapatalk

Re: how to use SSH to send any command to a unix box

PostPosted: Thu Feb 14, 2019 7:33 am
by mundmc
kw123 wrote:
Is there an emoji for that?


Image