2017-01-03 2 views
1

Я пытаюсь написать приложение go, которое позволит мне выполнить обратное ssh-туннелирование между машиной Windows и машиной Linux с помощью библиотеки go ssh.SSH Listener не закрывается

В процессе этого, я создаю слушатель на удаленном компьютере, следующим образом: remoteListener, err := sshClient.Listen("tcp", remoteString)

где sshClient является объектом типа ssh.Client и выполнен с возможностью подключения к удаленной машине.

Проблема в том, что когда процесс sshd на машине Linux нарушает соединение с приложением, прослушиватель ssh остается в живых на удаленной машине. Таким образом, повторное подключение к приложению не выполняется, потому что слушатель уже работает на том же порту на удаленной машине.

Как мне обойти эту проблему? Позволяет ли библиотека ssh определить тайм-аут для слушателя?

+0

Как вы закрываете сеанс удаленной машине? Сервер ssh должен очищать соединение, если сеанс был завершен. - – JimB

+0

Я тестирую сбой ssh, блокируя ssh-соединения на порту 2222 (порт, на котором я работаю), используя следующую команду: 'sudo iptables -D INPUT -p tcp -dport 2222 -j DROP' , Это, похоже, не очищает завершенную сессию. – shreyashk

+0

Если вы просто отбрасываете пакеты, удаленный сервер не знает, что вы завершили сеанс. – JimB

ответ

0

Я просто жду тайм-аута после повторного подключения. Я не нашел другого легкого решения для этого.