add ssh tunnel

This commit is contained in:
ginuerzh
2021-12-19 17:24:51 +08:00
parent 10bcc59370
commit 34d6e393a1
12 changed files with 561 additions and 50 deletions

View File

@ -6,6 +6,7 @@ import (
"github.com/go-gost/gost/pkg/auth"
tls_util "github.com/go-gost/gost/pkg/common/util/tls"
ssh_util "github.com/go-gost/gost/pkg/internal/util/ssh"
md "github.com/go-gost/gost/pkg/metadata"
"golang.org/x/crypto/ssh"
)
@ -64,7 +65,7 @@ func (h *forwardHandler) parseMetadata(md md.Metadata) (err error) {
}
if name := md.GetString(authorizedKeys); name != "" {
m, err := parseAuthorizedKeysFile(name)
m, err := ssh_util.ParseAuthorizedKeysFile(name)
if err != nil {
return err
}
@ -73,22 +74,3 @@ func (h *forwardHandler) parseMetadata(md md.Metadata) (err error) {
return
}
// parseSSHAuthorizedKeysFile parses ssh authorized keys file.
func parseAuthorizedKeysFile(name string) (map[string]bool, error) {
authorizedKeysBytes, err := ioutil.ReadFile(name)
if err != nil {
return nil, err
}
authorizedKeysMap := make(map[string]bool)
for len(authorizedKeysBytes) > 0 {
pubKey, _, _, rest, err := ssh.ParseAuthorizedKey(authorizedKeysBytes)
if err != nil {
return nil, err
}
authorizedKeysMap[string(pubKey.Marshal())] = true
authorizedKeysBytes = rest
}
return authorizedKeysMap, nil
}