У меня есть сервер Linux с xtightvnc на Ubuntu 18.04. Используя свой ноутбук, я могу установить туннельное соединение SSH с помощью PuTTY в Windows и установить соединение с vnc через localhost: 5901. Это работает без проблем. На том же ноутбуке, если я загружаюсь в Debian 9, чтобы попытаться воспроизвести соединение, используя:

ssh -L 5901:127.0.0.1:5901 -N -f -l username server_ip_address

Я получаю сообщение об ошибке:

bind: Cannot assign requested address

Запуск той же команды с подробной опцией:

ssh - v -L 5901:127.0.0.1:5901 -N -f -l username server_ip_address

Выдает следующий вывод (я сократил вывод):

debug1: Local connections to LOCALHOST:5901 forwarded to remote 
address 127.0.0.1:5901
debug1: Local forwarding listening on 127.0.0.1 port 5901.
bind: Address already in use
debug1: Local forwarding listening on ::1 port 5901.
bind: Cannot assign requested address
channel_setup_fwd_listener_tcpip: cannot listen to port: 5901
Could not request local forwarding.
debug1: Requesting no-more-sessions@openssh.com
debug1: forking to background
debug1: Entering interactive session.
debug1: pledge: network

Я не уверен, что это значит, но похоже, что предыдущее соединение, которое я открыл в Windows, все еще каким-то образом активно?

Я также пытался туннелировать в Debian с помощью PuTTY и тех же настроек, что и в Windows. Кажется, я могу подключиться, используя те же настройки, и я могу подключиться к vnc, хотя раньше это не работало. (Возможно, есть какая-то настройка охлаждения, о которой я не знаю, после того, как соединение было закрыто, что все еще сохраняет соединение открытым / назначенным адресом?)

Редактировать: это ошибка, которую я получаю, используя PuTTY в Linux, если адрес еще не сброшен:

vnc error

Основная проблема здесь, возможно, в том, что когда я закрываю PuTTY, соединение все еще активно (я только что проверил это, так как все еще мог подключиться к vnc, используя localhost: 5901). Я выхожу из своих сеансов PuTTY, используя exit.

Вывод netstat -tulpn также может иметь значение:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
PID/Program name    
tcp        0      0 127.0.0.1:6342          0.0.0.0:*               LIS 
TEN      
21618/megasync      
tcp        0      0 127.0.0.1:5901          0.0.0.0:*               
LISTEN      
21527/Xtightvnc     
tcp        0      0 0.0.0.0:6001            0.0.0.0:*               
LISTEN      
21527/Xtightvnc     
tcp        0      0 127.0.0.53:53           0.0.0.0:*                 
LISTEN      
796/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               
LISTEN      
874/sshd            
tcp6       0      0 :::22                   :::*                    
LISTEN      
874/sshd            
udp    33024      0 127.0.0.53:53           0.0.0.0:*                           
796/systemd-resolve 

Обновить:

Кажется, что все работает, но после закрытия соединения с PuTTY есть период охлаждения, прежде чем я смогу установить другое соединение из другого экземпляра Windows или Linux. Если кто-нибудь знает способ ускорить процесс, буду признателен услышать решение.

Обновление 2:

Под Linux кажется, что я могу эффективно убить ssh-туннель, например. с помощью pkill ssh (чтобы убить все текущие соединения ssh). Поэтому кажется, что PuTTY имеет тенденцию неправильно закрывать туннель к серверу при выходе из системы.

1
insideman 13 Июн 2018 в 06:41

1 ответ

Похоже, у вас есть какой-то процесс, который уже прослушивает 5901. Вы можете использовать другой порт:

ssh -L 15901:127.0.0.1:5901 login@host

Эта команда перенаправит ваш локальный порт 15901 на удаленный порт 5901. Поэтому вам нужно подключиться к 127.0.0.1:15901 с вашим клиентом VNC.

0
Krzysztof Sawicki 12 Июн 2018 в 17:57
Ssh -L 15901:127.0.0.1:5901 -N -f -L user server_address тоже выдает ошибку, но немного другую: прослушивание на 127.0.0.1, порт 15901. отладка1: канал 0: новый [прослушиватель порта] отладка1: прослушивание локальной переадресации на ::1 порт 15901. привязка: невозможно назначить запрошенный адрес отладка1: запрос no-more-sessions@openssh.com отладка1: переход к фоновой отладке1: вход в интерактивный сеанс. debug1: залог: проблема с сетью ipv6 здесь?
 – 
insideman
12 Июн 2018 в 18:15
Посмотрите на параметры, которые вы использовали: -L означает "прослушивание порта и перенаправление на порт", -l (маленькая буква L) означает "логин". Команда, которую вы выполнили, имеет второй -L вместо -l. Кроме того, ИМХО, проще использовать синтаксис user@host, чем -l user host.
 – 
Krzysztof Sawicki
12 Июн 2018 в 18:18
Да, извините, вторая буква «л» была опечаткой. Я использовал строчную букву «l», когда пробовал. Кажется, действительно есть какой-то механизм охлаждения, когда я устанавливаю соединение через ssh-туннель. Я только что попробовал свою исходную команду «ssh -L 5901:127.0.0.1:5901 -N -f -l user server-ip» и могу подключиться к «localhost: 5901» с помощью средства просмотра vnc. Я предполагаю, что мой вопрос заключается в том, как мне ускорить этот процесс. Мое решение функционально, но иногда может быть неудобно ждать более 1 часа, чтобы иметь возможность подключиться с использованием другого экземпляра.
 – 
insideman
13 Июн 2018 в 06:18