Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit09b173b

Browse files
committed
feat: Set SSH env vars:SSH_CLIENT,SSH_CONNECTION andSSH_TTY
Fixes#2339
1 parent58d2926 commit09b173b

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

‎agent/agent.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,11 @@ func (a *agent) handleSSHSession(session ssh.Session) (retErr error) {
423423
iferr!=nil {
424424
returnerr
425425
}
426+
// Set SSH connection environment variables, from the clients perspective.
427+
srcAddr,srcPort:=addrToSSHEnvAddr(session.RemoteAddr())
428+
dstAddr,dstPort:=addrToSSHEnvAddr(session.LocalAddr())
429+
cmd.Env=append(cmd.Env,fmt.Sprintf("SSH_CLIENT=%s %s %s",srcAddr,srcPort,dstPort))
430+
cmd.Env=append(cmd.Env,fmt.Sprintf("SSH_CONNECTION=%s %s %s %s",srcAddr,srcPort,dstAddr,dstPort))
426431

427432
ifssh.AgentRequested(session) {
428433
l,err:=ssh.NewAgentListener()
@@ -437,6 +442,8 @@ func (a *agent) handleSSHSession(session ssh.Session) (retErr error) {
437442
sshPty,windowSize,isPty:=session.Pty()
438443
ifisPty {
439444
cmd.Env=append(cmd.Env,fmt.Sprintf("TERM=%s",sshPty.Term))
445+
446+
// The pty package sets `SSH_TTY` on supported platforms.
440447
ptty,process,err:=pty.Start(cmd)
441448
iferr!=nil {
442449
returnxerrors.Errorf("start command: %w",err)
@@ -691,6 +698,19 @@ func (a *agent) handleReconnectingPTY(ctx context.Context, rawID string, conn ne
691698
}
692699
}
693700

701+
// addrToSSHEnvAddr turns the address and port into space-separated values,
702+
// works with IPv4, IPv6 and invalid addresses (such as [peer/unknown-addr]).
703+
funcaddrToSSHEnvAddr(a net.Addr) (addrstring,portstring) {
704+
addr=a.String()
705+
port="0"
706+
li:=strings.LastIndex(addr,":")
707+
ifli!=-1 {
708+
port=addr[li+1:]
709+
addr=addr[:li]
710+
}
711+
returnaddr,port
712+
}
713+
694714
// dialResponse is written to datachannels with protocol "dial" by the agent as
695715
// the first packet to signify whether the dial succeeded or failed.
696716
typedialResponsestruct {

‎pty/start_other.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package pty
55

66
import (
7+
"fmt"
78
"os/exec"
89
"runtime"
910
"strings"
@@ -18,6 +19,8 @@ func startPty(cmd *exec.Cmd) (PTY, Process, error) {
1819
iferr!=nil {
1920
returnnil,nil,xerrors.Errorf("open: %w",err)
2021
}
22+
23+
cmd.Env=append(cmd.Env,fmt.Sprintf("SSH_PTY=%s",tty.Name()))
2124
cmd.SysProcAttr=&syscall.SysProcAttr{
2225
Setsid:true,
2326
Setctty:true,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp