Re: Re: run remote shell script

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



First off, Roger, Thomas, not sure which is your given name -- please
use a mail or news agent that will wrap your lines with linebreaks at 72
characters. Some of us are on text-based clients, and it's difficult to
read your posts when they extend beyond the screen boundaries... ;-)

* Roger Thomas <sniper@xxxxxxxxxxx> :
> OK. I am able to setup remote key authentication between svrA and
> svrB. From svrA I can login to svrB with something like
> [www@svrA www]$ ssh www@svrB
>
> and I can also execute a shell script like
> [www@svrA www]$ ssh www@svrB /tmp/test.sh
>
> On svrA I have a PHP script like so:
> <?
> system('ssh www@svrB /tmp/test.sh someDIR');
> ?>
>
> /tmp/test.sh on svrB is only a one liner like so:
> mkdir /tmp/$1
>
> I ran the script from the browser but the /tmp/someDIR is not created :(
> Could it be that user nobody on svrA is *not* allowed to connect to
> svrB because the public key belongs to user www ? How do I rectify
> this ?
>
> In the actual situation, I need to execute a shell script in svrB
> (from browser served by Apache on svrA) that only root can run. Please
> advise. I am getting very worried.

Okay, I should have been a little more explicit. 

There are two ways I've done this. The initial details are different,
but the final call is pretty much the same. 

1. Using sudo
   'sudo' allows users to run commands as different users. In this case,
   we want the user running the web server (usually www, apache, or
   nobody) to run ssh, or a script that executes the ssh command, as a
   normal user. I usually opt for the latter, and create a script such
   as:

       #!/bin/bash
       exec ssh user@svrA /path/to/remote/script

   and save it in /usr/local/bin. Then, edit sudoers (usually executing
   'visudo' as root), and add a line like

       nobody ALL = (username) NOPASSWD: /usr/local/bin/SCRIPTNAME

   What this does is to allow the user 'nobody' (or whomever runs the
   web server process) to execute /usr/local/bin/SCRIPTNAME as
   'username', and they do not need to enter a password to do so
   (normally with sudo you do).

   You'll need to restart the webserver after granting the sudo
   privileges.

   In this scenario, the normal user, specified by 'username' above,
   needs to have the the SSH keys setup between the servers.

2. Give the web user a home directory
   The other option is to setup a home directory for the web user. This
   will mean editing the /etc/passwd file to give the web user both a
   home directory and a shell; these are teh last two items in the colon
   delimited list. A sample entry might look like:

       nobody:x:65534:65534:nobody:/var/www:/bin/bash
   
   Once you've done this, restart the web server. At this point, you'll
   then need to become the web user briefly in order to:

      * generate an SSH key
      * send the key to the remote server

   Then, on the remote server, add the SSH key to the appropriate user
   on that system.

Good luck!

> Quoting Matthew Weier O'Phinney <mweierophinney@xxxxxxxxx> :
>
> > * Roger Thomas <sniper@xxxxxxxxxxx> :
> > > My PHP script is in svrA. How do I run a shell script in svrB?
> > > svrB does not have PHP and Apache :(
> > > Is this at all possible? Please advise.
> > 
> > Use ssh. You will have to setup remote key authentication from svrA to
> > svrB (so that a password will not be needed), and then in your script
> > you would call:
> > 
> >     system('ssh svrB /path/to/scriptToRun');

-- 
Matthew Weier O'Phinney
Zend Certified Engineer
http://weierophinney.net/matthew/

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux