way to set shell used for remote commands?

Douglas E Engert deengert at gmail.com
Thu Jan 22 07:33:43 AEDT 2015



On 1/21/2015 9:36 AM, Jason Vas Dias wrote:
> Good day -
>
> Please can OpenSSH provide some way of specifying which shell to use to
> execute commands on a host.
>
> For the account I need to use,  the user's password shell is not acceptable,
> (a ten year old version of bash 3.0)
> and cannot be changed without weeks or months of burocracy , if at all.
>
> I built & installed the latest bash under that account, in the ~/bin directory,
> but SSH will not use it.
>
> Using the client OpenSSH version : 1:6.6p1-2ubuntu2 on a linux x86_64
> Ubuntu 14.04.1 host,
> if I try to specify which bash to use for an  SSH command like :
>   $ ssh $account /home/${user}/bin/bash -c 'echo $BASH_VERSION; echo
> $BASH_VERSION';

looks like escape problem  and not clear if $user should be $USER and is being done
on local system...

Try something like:
  ssh $account /home/${USER}/bin/bash -c \'echo \$BASH_VERSION\; echo \$BASH_VERSION\';




> something very weird happens - only the second statement produces any
> output .
> If this is changed, we see only the first statement is run by the new shell,
> and the second is run by the old shell:
>    $ ssh $account  /home/${user}/bin/bash -c \
>      'set | grep BASH_VERSION; echo $BASH_VERSION'
> Produces the output:
>      BASH_VERSION='4.3.30(1)-release'
>      3.0.0(1)-release
> So the first statement is run by the new shell, and the second by the old
> shell.
>
> This appears to be a major bug in OpenSSH - should I report it ?
>
> Since OpenSSH provides no way to run commands with anything other
> than the user's password shell,  it really needs to do so.
>
> A simple patch would be to session.c, @ line 1746 :
>
> /*
>   * Get the shell from the password data.  An empty shell field is
>   * legal, and means /bin/sh.
>   */
> shell = (pw->pw_shell[0] == 0) ? _PATH_BSHELL : pw->pw_shell;
>
>
> One could do something like:
>
>      char *sh;
>      if ( (sh=getenv("SSH_SHELL") )!= NULL )
>           shell = sh;
>      else
>           shell = (pw->pw_shell[0] == 0) ? _PATH_BSHELL : pw->pw_shell;
>
>
> Or provide some configuration option  - this would probably have to
> be per-server .
>
> Is there any hope of getting the ability to specify which shell to run
> remote commands with in a forthcoming OpenSSH release, or do
> I need to apply my patch and maintain my own OpenSSH branch ?
>
> Thanks & Regards,
> Jason
> _______________________________________________
> openssh-unix-dev mailing list
> openssh-unix-dev at mindrot.org
> https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev
>

-- 

  Douglas E. Engert  <DEEngert at gmail.com>



More information about the openssh-unix-dev mailing list