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

Commit6ebda2c

Browse files
committed
feat(cli/ssh): allow multiple remote forwards
1 parent08b4eb3 commit6ebda2c

File tree

2 files changed

+27
-30
lines changed

2 files changed

+27
-30
lines changed

‎cli/remoteforward.go‎

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"io"
77
"net"
8-
"os"
98
"regexp"
109
"strconv"
1110

@@ -67,19 +66,13 @@ func parseRemoteForwardTCP(matches []string) (net.Addr, net.Addr, error) {
6766
returnlocalAddr,remoteAddr,nil
6867
}
6968

69+
// parseRemoteForwardUnixSocket parses a remote forward flag. Note that
70+
// we don't verify that the local socket path exists because the user
71+
// may create it later. This behavior matches OpenSSH.
7072
funcparseRemoteForwardUnixSocket(matches []string) (net.Addr, net.Addr,error) {
7173
remoteSocket:=matches[1]
7274
localSocket:=matches[2]
7375

74-
fileInfo,err:=os.Stat(localSocket)
75-
iferr!=nil {
76-
returnnil,nil,err
77-
}
78-
79-
iffileInfo.Mode()&os.ModeSocket==0 {
80-
returnnil,nil,xerrors.New("File is not a Unix domain socket file")
81-
}
82-
8376
remoteAddr:=&net.UnixAddr{
8477
Name:remoteSocket,
8578
Net:"unix",

‎cli/ssh.go‎

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func (r *RootCmd) ssh() *clibase.Cmd {
5353
waitEnumstring
5454
noWaitbool
5555
logDirPathstring
56-
remoteForwardstring
56+
remoteForwards[]string
5757
disableAutostartbool
5858
)
5959
client:=new(codersdk.Client)
@@ -135,13 +135,15 @@ func (r *RootCmd) ssh() *clibase.Cmd {
135135
stack:=newCloserStack(ctx,logger)
136136
deferstack.close(nil)
137137

138-
ifremoteForward!="" {
139-
isValid:=validateRemoteForward(remoteForward)
140-
if!isValid {
141-
returnxerrors.Errorf(`invalid format of remote-forward, expected: remote_port:local_address:local_port`)
142-
}
143-
ifisValid&&stdio {
144-
returnxerrors.Errorf(`remote-forward can't be enabled in the stdio mode`)
138+
iflen(remoteForwards)>0 {
139+
for_,remoteForward:=rangeremoteForwards {
140+
isValid:=validateRemoteForward(remoteForward)
141+
if!isValid {
142+
returnxerrors.Errorf(`invalid format of remote-forward, expected: remote_port:local_address:local_port`)
143+
}
144+
ifisValid&&stdio {
145+
returnxerrors.Errorf(`remote-forward can't be enabled in the stdio mode`)
146+
}
145147
}
146148
}
147149

@@ -311,18 +313,20 @@ func (r *RootCmd) ssh() *clibase.Cmd {
311313
}
312314
}
313315

314-
ifremoteForward!="" {
315-
localAddr,remoteAddr,err:=parseRemoteForward(remoteForward)
316-
iferr!=nil {
317-
returnerr
318-
}
316+
iflen(remoteForwards)>0 {
317+
for_,remoteForward:=rangeremoteForwards {
318+
localAddr,remoteAddr,err:=parseRemoteForward(remoteForward)
319+
iferr!=nil {
320+
returnerr
321+
}
319322

320-
closer,err:=sshRemoteForward(ctx,inv.Stderr,sshClient,localAddr,remoteAddr)
321-
iferr!=nil {
322-
returnxerrors.Errorf("ssh remote forward: %w",err)
323-
}
324-
iferr=stack.push("sshRemoteForward",closer);err!=nil {
325-
returnerr
323+
closer,err:=sshRemoteForward(ctx,inv.Stderr,sshClient,localAddr,remoteAddr)
324+
iferr!=nil {
325+
returnxerrors.Errorf("ssh remote forward: %w",err)
326+
}
327+
iferr=stack.push("sshRemoteForward",closer);err!=nil {
328+
returnerr
329+
}
326330
}
327331
}
328332

@@ -460,7 +464,7 @@ func (r *RootCmd) ssh() *clibase.Cmd {
460464
Description:"Enable remote port forwarding (remote_port:local_address:local_port).",
461465
Env:"CODER_SSH_REMOTE_FORWARD",
462466
FlagShorthand:"R",
463-
Value:clibase.StringOf(&remoteForward),
467+
Value:clibase.StringArrayOf(&remoteForwards),
464468
},
465469
sshDisableAutostartOption(clibase.BoolOf(&disableAutostart)),
466470
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp