Skip to content

Commit 73ce3a2

Browse files
committed
add bunch of ENV vars (both SSH connection and login-related ones)
1 parent 9d2462a commit 73ce3a2

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

cmd/function22/main.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,11 @@ func handleSSHConnection(s gliderssh.Session, account linuxuser.Account, verbose
195195
sshClientEnvs = append(sshClientEnvs, fmt.Sprintf("TERM=%s", ptyReq.Term))
196196
}
197197

198+
sshClientEnvs = append(sshClientEnvs, sshConnectionEnvVars(s)...)
199+
if userWantsDefaultShell { // FIXME: should this be set anyway?
200+
sshClientEnvs = append(sshClientEnvs, loginEnvVars(s, account.Shell)...)
201+
}
202+
198203
//nolint:gosec // Due to nature of SSH this is a thing we must do
199204
cmd := exec.CommandContext(s.Context(), argv[0], argv[1:]...)
200205
cmd.Env = sshClientEnvs
@@ -274,3 +279,44 @@ func handleSSHConnection(s gliderssh.Session, account linuxuser.Account, verbose
274279
return handleExit(cmd.Run())
275280
}
276281
}
282+
283+
// https://unix.stackexchange.com/a/76356
284+
func loginEnvVars(s gliderssh.Session, shell string) []string {
285+
return []string{
286+
makeEnvVarStr("HOME", fmt.Sprintf("/home/%s", s.User())),
287+
makeEnvVarStr("SHELL", shell),
288+
makeEnvVarStr("USER", s.User()),
289+
}
290+
}
291+
292+
// https://en.wikibooks.org/wiki/OpenSSH/Client_Applications#SSH_Client_Environment_Variables_--_Server_Side
293+
func sshConnectionEnvVars(s gliderssh.Session) []string {
294+
clientAddress := s.RemoteAddr().(*net.TCPAddr)
295+
serverAddress := s.LocalAddr().(*net.TCPAddr)
296+
297+
// SSH_CONNECTION=100.76.39.10 37004 100.115.75.64 22
298+
// SSH_CONNECTION=<clientIP> <clientPort> <serverIP> <serverPort>
299+
connEnv := fmt.Sprintf(
300+
"SSH_CONNECTION=%s %d %s %d",
301+
clientAddress.IP.String(),
302+
clientAddress.Port,
303+
serverAddress.IP.String(),
304+
serverAddress.Port)
305+
306+
// SSH_CLIENT=100.76.39.10 37004 22
307+
// SSH_CLIENT=<clientIP> <clientPort> <serverPort>
308+
clientEnv := fmt.Sprintf(
309+
"SSH_CLIENT=%s %d %d",
310+
clientAddress.IP.String(),
311+
clientAddress.Port,
312+
serverAddress.Port)
313+
314+
// TODO
315+
// ttyEnv:="SSH_TTY=/dev/pts/2"
316+
317+
return []string{connEnv, clientEnv}
318+
}
319+
320+
func makeEnvVarStr(key string, value string) string {
321+
return fmt.Sprintf("%s=%s", key, value)
322+
}

0 commit comments

Comments
 (0)