Я хотел бы понять, почему мой SSH-клиент выдает мне эту ошибку:
channel 1017: open failed: connect failed: open failed
channel 1017: open failed: connect failed: Too many open files
channel 1017: open failed: connect failed: Too many open files
channel 1017: open failed: connect failed: Too many open files
Фон:
Мой веб-браузер настроен на использование localhost:6162 в качестве прокси-сервера socks и использую SSH для предоставления этого прокси с помощью ssh -d6162 hostname
.
Обычно это связано с удаленным сервером, и в этом случае он работает как задумано. Но некоторые веб-сайты требуют от меня подключения из моей собственной страны, которой не является мой сервер.
Поскольку нелегко переконфигурировать прокси-сервер браузера каждый раз, когда мне нужен такой сайт, я отключаю ssh-клиент и запускаю новый с ssh -d6162 127.0.0.1
Теоретически, это должно просто заменить прокси, который видит браузер, на другую конечную точку, и я ожидаю, что он будет вести себя так же.
Однако это не так, и вместо этого клиент ssh начинает выдавать ошибку «слишком много открытых файлов», и через несколько секунд соединение прерывается.
Если я запускаю ssh с -vvv
, я вижу, что, как только я его запускаю, (ssh?) клиент генерирует соединения до достижения max-open-files:
debug1: channel 993: free: direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38054 to 127.0.0.1 port 34636, nchannels 24
debug3: channel 993: status: The following connections are open:
#993 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38054 to 127.0.0.1 port 34636 (t4 r989 i0/0 o3/0 fd 999/999 cc -1)
#994 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38056 to 127.0.0.1 port 34636 (t4 r990 i0/0 o3/0 fd 1000/1000 cc -1)
#995 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38058 to 127.0.0.1 port 34636 (t4 r991 i0/0 o3/0 fd 1001/1001 cc -1)
#996 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38060 to 127.0.0.1 port 34636 (t4 r992 i0/0 o3/0 fd 1002/1002 cc -1)
#997 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38062 to 127.0.0.1 port 34636 (t4 r993 i0/0 o3/0 fd 1003/1003 cc -1)
#998 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38064 to 127.0.0.1 port 34636 (
debug1: channel 994: free: direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38056 to 127.0.0.1 port 34636, nchannels 23
debug3: channel 994: status: The following connections are open:
#994 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38056 to 127.0.0.1 port 34636 (t4 r990 i0/0 o3/0 fd 1000/1000 cc -1)
#995 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38058 to 127.0.0.1 port 34636 (t4 r991 i0/0 o3/0 fd 1001/1001 cc -1)
#996 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38060 to 127.0.0.1 port 34636 (t4 r992 i0/0 o3/0 fd 1002/1002 cc -1)
#997 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38062 to 127.0.0.1 port 34636 (t4 r993 i0/0 o3/0 fd 1003/1003 cc -1)
#998 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38064 to 127.0.0.1 port 34636 (t4 r994 i0/0 o3/0 fd 1004/1004 cc -1)
#999 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38066 to 127.0.0.1 port 34636
Это продолжается до тех пор, пока не будет достигнут предел файлов.
Я думаю, что непреднамеренно создаю какой-то цикл, так что каждое соединение, которое создает браузер, создает другое соединение, которое создает другое соединение, которое создает другое соединение и т.д.
Опять же , это происходит только с dynamicforward на localhost
в моем нормальном использовании случае подключение к удаленному серверу он работает отлично.
клиент и сервер ssh:
OpenSSH_7.5p1 Debian-10, OpenSSL 1.0.2l 25 May 2017
браузер: Google Chrome 61.0.3163.91
Конфигурация браузера:
google-chrome --proxy-server="socks5://localhost:6162" --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE localhost, EXCLUDE 192.168.178.0/24" --proxy-bypass-list="127.0.0.1:3000,127.0.0.1,localhost:3000,localhost,192.168.178.0/24"
Кто-нибудь может воспроизвести это? Любое объяснение?
PS Как обычно, когда я писал это, мне пришло в голову, что браузер может попытаться получить доступ к прокси на локальном хосте через сам прокси, но это не имеет никакого смысла, не так ли?