bugzilla-daemon at mindrot.org
2023-Aug-30 21:52 UTC
[Bug 3609] New: Support the special ${RANDOM} environment variable
https://bugzilla.mindrot.org/show_bug.cgi?id=3609 Bug ID: 3609 Summary: Support the special ${RANDOM} environment variable Product: Portable OpenSSH Version: 9.4p1 Hardware: Other OS: Linux Status: NEW Severity: enhancement Priority: P5 Component: ssh Assignee: unassigned-bugs at mindrot.org Reporter: erjoalgo at gmail.com Created attachment 3727 --> https://bugzilla.mindrot.org/attachment.cgi?id=3727&action=edit Patch to implement ${RANDOM} support I use the RemoteForward keyword in my sshd_config file to create a unix socket on the remote host, I personally use this socket to map to a local program that can receive GUI-related commands, e.g. set clipboard, open a URL in a browser, etc, from any commands executed on the remote server. It looks something like this: Match host * SendEnv DESKTOP_GROUP_NUMBER RemoteForward /tmp/.x-service-debian-x1-7th.sock localhost:1959 Sometimes I have multiple ssh connections to the same machine, e.g. using multiple desktops for different areas of work, and the RemoteForward request will fail because the remote socket has a fixed path and will already be taken. So I need to make the RemoteForward unix socket path to be unique for each ssh connection. I looked through man ssh_config and noticed the TOKENS section, but they all appear to be deterministic. I also noticed that RemoteForward supports environment variables and tried to use the ${RANDOM} environment variable, but this failed because ${RANDOM} is not a real environment variable but rather a bash feature. So I implemented a feature to support a bash-like ${RANDOM} environment variable when expanding tokens and environment variables. This can be very useful for generating connection-unique strings, and usage should be straightforward. My RemoteForward directive now looks like: Match host * SendEnv DESKTOP_GROUP_NUMBER RemoteForward /tmp/.x-service-debian-x1-7th-${RANDOM}.sock localhost:1959 I've tested and this works as expected. I have attached the patch, I hope it can be merged, please let me know if you have any suggestions. Thanks, Ernesto -- You are receiving this mail because: You are watching the assignee of the bug.
bugzilla-daemon at mindrot.org
2023-Aug-31 03:18 UTC
[Bug 3609] Support the special ${RANDOM} environment variable
https://bugzilla.mindrot.org/show_bug.cgi?id=3609 Damien Miller <djm at mindrot.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |djm at mindrot.org --- Comment #1 from Damien Miller <djm at mindrot.org> --- How would this actually work? $RANDOM doesn't end up anywhere usable other than the listening path on the remote side. Do you enumerate all paths there to figure out which one? I suspect $RANDOM isn't the best solution for your underlying problem. For a start, some shells already provide this with syntax that is incompatible with yours (e.g. https://man.openbsd.org/ksh.1#RANDOM). Furthermore, a merely random input is only part of an effective unique/temporary name facility. Would an explicit unique/temporary name facility for forwarded Unix domain sockets be better? There is already an analogous thing for remote-forward ports, where a listener port number of 0 indicates that the server should allocate one and tell the client what it picked. We could do something similar here (say when passed an empty listen pathname). Would this work for you? -- You are receiving this mail because: You are watching the assignee of the bug. You are watching someone on the CC list of the bug.
bugzilla-daemon at mindrot.org
2023-Aug-31 17:12 UTC
[Bug 3609] Support the special ${RANDOM} environment variable
https://bugzilla.mindrot.org/show_bug.cgi?id=3609 --- Comment #2 from Ernesto Alfonso <erjoalgo at gmail.com> ---> How would this actually work? $RANDOM doesn't end up anywhere usable other than the listening path on the remote side. Do you enumerate all paths there to figure out which one?On the remote side the client program can use a glob like /tmp/.x-service-*.sock. This is possible because I can control where within the RemoteForward path the ${RANDOM} gets inserted.> I suspect $RANDOM isn't the best solution for your underlying problem.The solution certainly works for me but if you have a better suggestion I would be open to it.> For a start, some shells already provide this with syntax that is incompatible with yours (e.g. https://man.openbsd.org/ksh.1#RANDOM).Not sure I follow. I installed ksh and `echo ${RANDOM}` worked as expected, how is that syntax incompatible?> Furthermore, a merely random input is only part of an effective unique/temporary name facility.That is exactly how the feature would be useful to me.> Would an explicit unique/temporary name facility for forwarded Unix domain sockets be better? There is already an analogous thing for remote-forward ports, where a listener port number of 0 indicates that the server should allocate one and tell the client what it picked. We could do something similar here (say when passed an empty listen pathname). Would this work for you?On the remote side I need to know where to look, so binding to a random port or wouldn't be very useful. That is the reason I am using unix sockets with a regular, globabble pattern and a fixed prefix. -- You are receiving this mail because: You are watching someone on the CC list of the bug. You are watching the assignee of the bug.
Possibly Parallel Threads
- [Bug 1285] provide fallback options /etc/ssh/ssh_config
- ssh-copy-id no newline bug
- [Bug 1285] provide fallback options /etc/ssh/ssh_config
- [Bug 2677] New: Provide a way to set an environment variable from ssh_config
- [Bug 1285] no way to override SendEnv directive in /etc/ssh/ssh_config