Sunday, February 04, 2024

Re: Proper way to set PATH environment with SSH non-interactive command

Thus said Kastus Shchuka on Sun, 04 Feb 2024 13:40:58 -0800:

> SetEnv Directly specify one or more environment variables and their
> contents to be sent to the server.

Thank you this option looks like it could also work, except it's not one
of which a user with no permissions can take advantage as the AcceptEnv
option is disabled by default on most servers I imagine. So, while a
normal user can set the environment for interactive shells, it seems
that for non-interactive shells, the only viable solution is to prepend
each command with the environment to be set (I see nothing in ksh(1)
that suggests that the environment of non-interactive shells are under
the control of the user).

Also, I don't seem to be succesful in making SetEnv (or SendEnv) work.
I've reconfigured (and restarted) sshd_config to have:

AcceptEnv PATH

Then I configured ~/.ssh/config with:

Host localhost
SetEnv PATH=/home/amb/bin:/bin:/usr/bin:/usr/local/bin


When I run "ssh -v localhost env" I can see that the client sends the path:

debug1: channel 1: setting env PATH = "/home/amb/bin:/bin:/usr/bin:/usr/local/bin"
debug1: Sending command: env


But env reports the following PATH:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin

I also tried using SendEnv but while the client sends the environment,
the server seems to ignore it, even if I set the AcceptEnv pattern to *.

# sshd -T -C user=amb,host=localhost | grep acceptenv
acceptenv PATH

When I run "sshd -d -d" I see the following in the output:

debug2: Setting env 0: PATH=/home/amb/bin:/bin:/usr/bin:/usr/local/bin

So it certainly looks like the server is accepting the path, however,
env still reports a different path. Is this perhaps a bug? Maybe step 5
in LOGIN PROCESS is overwriting the PATH that was sent and received by
the server?

This is on OpenBSD 7.4.

Thanks,

Andy

No comments:

Post a Comment