ssh: Add cipher, MAC, and key exchange configuration

This commit is contained in:
世界 2026-04-28 09:01:24 +08:00
parent 78f502d016
commit 610aa9432d
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
4 changed files with 72 additions and 0 deletions

View file

@ -42,6 +42,9 @@ type Outbound struct {
user string
hostKey []ssh.PublicKey
hostKeyAlgorithms []string
cipher []string
mac []string
kexAlgorithm []string
clientVersion string
authMethod []ssh.AuthMethod
clientAccess sync.Mutex
@ -62,6 +65,9 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL
serverAddr: options.ServerOptions.Build(),
user: options.User,
hostKeyAlgorithms: options.HostKeyAlgorithms,
cipher: options.Cipher,
mac: options.MAC,
kexAlgorithm: options.KexAlgorithm,
clientVersion: options.ClientVersion,
}
if outbound.serverAddr.Port == 0 {
@ -155,6 +161,15 @@ func (s *Outbound) connect() (*ssh.Client, error) {
return E.New("host key mismatch, server send ", key.Type(), " ", base64.StdEncoding.EncodeToString(serverKey))
},
}
if len(s.cipher) > 0 {
config.Ciphers = s.cipher
}
if len(s.mac) > 0 {
config.MACs = s.mac
}
if len(s.kexAlgorithm) > 0 {
config.KeyExchanges = s.kexAlgorithm
}
clientConn, chans, reqs, err := ssh.NewClientConn(conn, s.serverAddr.Addr.String(), config)
if err != nil {
conn.Close()