Size: a a a

2020 December 11

w

whoami in Go-go!
Спасибо всем!
источник

p

pragus in Go-go!
Dmitry
https://pastebin.com/N75NyGiJ
вот pprof

нода - параллелс виртуалка, 8 гиг памяти, проц 4 ядра
я бы начал с GODEBUG=asyncpreemptoff=1
источник

A

Amirsho in Go-go!
всем привет
источник

A

Amirsho in Go-go!
как поменять значение стуртуры внутри цикла(т.е у меня есть слайс структур и по циклу какие-то из них я меняю)
источник

ВС

Владимир Столяров... in Go-go!
slice[i].field = value
источник

ВС

Владимир Столяров... in Go-go!
или slice[i] = yourtype{...} если целиком надо
источник

A

Amirsho in Go-go!
спасибо
источник

E

Egor in Go-go!
Egor
На сервере 1 расположено приложение на GO
На сервер 2 подключаюсь по ssh в го
затем открываю тоннель на сервер 3- который расположен в сети сервера 2
там есть аэроспайк к которому нужно получить доступ. Напрямую работает, а через тоннель нет, почему? Так же через тоннель постгрес и кликхаус работают. Код
type SshConnection struct {
 Client *ssh.Client
}
ssh := &SshConnection{}
 addr := fmt.Sprintf("%s:%s", "remote2.host", "22")
 clientConfig := &ssh.ClientConfig{
   User: "test",
   Auth: []ssh.AuthMethod{
     ssh.Password("test"),
   },
   Timeout:         5 * time.Minute,
   HostKeyCallback: ssh.InsecureIgnoreHostKey(),
 }
c.Client, err = ssh.Dial("tcp", addr, clientConfig)
 if err != nil {
   return errors.Wrap(err, "initialize connect")
 }
//---------------------------//
asRemoteAddr := fmt.Sprintf("%s:%s",
   "remote3.host", "3000")
 asLocalAddr := fmt.Sprintf("%s:%s",
   "localhost", "3000")
 err = ssh.OpenTunnel(asRemoteAddr, asLocalAddr)
 if err != nil {
   return errors.Wrap(err, "open tunnel for as")
 }
//---------------------------//
asClient, err = aerospike.NewClient("localhost", 3000)
   if err != nil {
     panic(err)
   }
На сервере 1 расположено приложение на GO
На сервер 2 подключаюсь по ssh в го
затем открываю тоннель на сервер 3- который расположен в сети сервера 2
там есть аэроспайк к которому нужно получить доступ. Напрямую работает, а через тоннель нет, почему? Так же через тоннель постгрес и кликхаус работают. Код:
type SshConnection struct {
 Client *ssh.Client
}
ssh := &SshConnection{}
 addr := fmt.Sprintf("%s:%s", "remote2.host", "22")
 clientConfig := &ssh.ClientConfig{
   User: "test",
   Auth: []ssh.AuthMethod{
     ssh.Password("test"),
   },
   Timeout:         5 * time.Minute,
   HostKeyCallback: ssh.InsecureIgnoreHostKey(),
 }
c.Client, err = ssh.Dial("tcp", addr, clientConfig)
 if err != nil {
   return errors.Wrap(err, "initialize connect")
 }
//---------------------------//
asRemoteAddr := fmt.Sprintf("%s:%s",
   "remote3.host", "3000")
 asLocalAddr := fmt.Sprintf("%s:%s",
   "localhost", "3000")
 err = ssh.OpenTunnel(asRemoteAddr, asLocalAddr)
 if err != nil {
   return errors.Wrap(err, "open tunnel for as")
 }
//---------------------------//
asClient, err = aerospike.NewClient("localhost", 3000)
   if err != nil {
     panic(err)
   }
//---------------------------//
func (c *SshConnection) OpenTunnel(remoteAddr, localAddr string) error {
 remote, err := c.Client.Dial("tcp", remoteAddr)
 if err != nil {
   return errors.Wrap(err, "open remote connection")
 }

 local, err := net.Listen("tcp", localAddr)
 if err != nil {
   return errors.Wrap(err, "open local connection")
 }

 go func(remote net.Conn, local net.Listener) {
   defer remote.Close()
   defer local.Close()

   for {
     l, err := local.Accept()
     if err != nil {
       log.Fatalf("tunnel: listen Accept failed %s", err)
     }

     go func() {
       _, err := io.Copy(l, remote)
       if err != nil {
         log.Fatalf("tunnel: io.Copy failed: %v", err)
       }
     }()

     go func() {
       _, err := io.Copy(remote, l)
       if err != nil {
         log.Fatalf("tunnel: io.Copy failed: %v", err)
       }
     }()
   }
 }(remote, local)
 return nil
}
источник

AS

Alexey Shumkin in Go-go!
Egor
На сервере 1 расположено приложение на GO
На сервер 2 подключаюсь по ssh в го
затем открываю тоннель на сервер 3- который расположен в сети сервера 2
там есть аэроспайк к которому нужно получить доступ. Напрямую работает, а через тоннель нет, почему? Так же через тоннель постгрес и кликхаус работают. Код:
type SshConnection struct {
 Client *ssh.Client
}
ssh := &SshConnection{}
 addr := fmt.Sprintf("%s:%s", "remote2.host", "22")
 clientConfig := &ssh.ClientConfig{
   User: "test",
   Auth: []ssh.AuthMethod{
     ssh.Password("test"),
   },
   Timeout:         5 * time.Minute,
   HostKeyCallback: ssh.InsecureIgnoreHostKey(),
 }
c.Client, err = ssh.Dial("tcp", addr, clientConfig)
 if err != nil {
   return errors.Wrap(err, "initialize connect")
 }
//---------------------------//
asRemoteAddr := fmt.Sprintf("%s:%s",
   "remote3.host", "3000")
 asLocalAddr := fmt.Sprintf("%s:%s",
   "localhost", "3000")
 err = ssh.OpenTunnel(asRemoteAddr, asLocalAddr)
 if err != nil {
   return errors.Wrap(err, "open tunnel for as")
 }
//---------------------------//
asClient, err = aerospike.NewClient("localhost", 3000)
   if err != nil {
     panic(err)
   }
//---------------------------//
func (c *SshConnection) OpenTunnel(remoteAddr, localAddr string) error {
 remote, err := c.Client.Dial("tcp", remoteAddr)
 if err != nil {
   return errors.Wrap(err, "open remote connection")
 }

 local, err := net.Listen("tcp", localAddr)
 if err != nil {
   return errors.Wrap(err, "open local connection")
 }

 go func(remote net.Conn, local net.Listener) {
   defer remote.Close()
   defer local.Close()

   for {
     l, err := local.Accept()
     if err != nil {
       log.Fatalf("tunnel: listen Accept failed %s", err)
     }

     go func() {
       _, err := io.Copy(l, remote)
       if err != nil {
         log.Fatalf("tunnel: io.Copy failed: %v", err)
       }
     }()

     go func() {
       _, err := io.Copy(remote, l)
       if err != nil {
         log.Fatalf("tunnel: io.Copy failed: %v", err)
       }
     }()
   }
 }(remote, local)
 return nil
}
источник

E

Egor in Go-go!
func (c *SshConnection) OpenTunnel(remoteAddr, localAddr string) error {
 remote, err := c.Client.Dial("tcp", remoteAddr)
 if err != nil {
   return errors.Wrap(err, "open remote connection")
 }

 local, err := net.Listen("tcp", localAddr)
 if err != nil {
   return errors.Wrap(err, "open local connection")
 }

 go func(remote net.Conn, local net.Listener) {
   defer remote.Close()
   defer local.Close()

   for {
     l, err := local.Accept()
     if err != nil {
       log.Fatalf("tunnel: listen Accept failed %s", err)
     }

     go func() {
       _, err := io.Copy(l, remote)
       if err != nil {
         log.Fatalf("tunnel: io.Copy failed: %v", err)
       }
     }()

     go func() {
       _, err := io.Copy(remote, l)
       if err != nil {
         log.Fatalf("tunnel: io.Copy failed: %v", err)
       }
     }()
   }
 }(remote, local)
 return nil
}
источник

E

Egor in Go-go!
вот метод
источник

AS

Alexey Shumkin in Go-go!
Egor
func (c *SshConnection) OpenTunnel(remoteAddr, localAddr string) error {
 remote, err := c.Client.Dial("tcp", remoteAddr)
 if err != nil {
   return errors.Wrap(err, "open remote connection")
 }

 local, err := net.Listen("tcp", localAddr)
 if err != nil {
   return errors.Wrap(err, "open local connection")
 }

 go func(remote net.Conn, local net.Listener) {
   defer remote.Close()
   defer local.Close()

   for {
     l, err := local.Accept()
     if err != nil {
       log.Fatalf("tunnel: listen Accept failed %s", err)
     }

     go func() {
       _, err := io.Copy(l, remote)
       if err != nil {
         log.Fatalf("tunnel: io.Copy failed: %v", err)
       }
     }()

     go func() {
       _, err := io.Copy(remote, l)
       if err != nil {
         log.Fatalf("tunnel: io.Copy failed: %v", err)
       }
     }()
   }
 }(remote, local)
 return nil
}
Он самописный , что ли?
источник

E

Egor in Go-go!
да
источник

AS

Alexey Shumkin in Go-go!
Egor
да
Ээм... А кем?
А оно где-то уже работает?
источник

E

Egor in Go-go!
Alexey Shumkin
Ээм... А кем?
А оно где-то уже работает?
Мной сделано, работает я уже писал "Так же через тоннель постгрес и кликхаус работают"
источник

AS

Alexey Shumkin in Go-go!
Egor
Мной сделано, работает я уже писал "Так же через тоннель постгрес и кликхаус работают"
Эмм...а зачем, если есть даже две либы с этим?

Т.е через этот/такой тоннель только аэроспайк не работает?
источник

E

Egor in Go-go!
Alexey Shumkin
Эмм...а зачем, если есть даже две либы с этим?

Т.е через этот/такой тоннель только аэроспайк не работает?
скинь либы(я чет поискал не нашел и написал), да только аэроспайк чет не заводится
источник

ВС

Владимир Столяров... in Go-go!
Возможно странный вопрос, а не проще ли отдать туннелирование отдельному ssh демону или поднять например wireguard
источник

ZH

Zhan He in Go-go!
disconnect != log out
источник

E

Egor in Go-go!
Zhan He
disconnect != log out
это куда?
what is it?
источник