Описание моей проблемы следующее.

У меня есть рабочий компьютер, который всегда подключен к сети и имеет статический IP-адрес. У меня есть ноутбук, с которым я путешествую - очевидно, у него нет статического IP, но я хочу, чтобы он был доступен снаружи. Итак, я открываю туннель ssh от порта work-comp 111 до порта 222 ноутбука (команда «ssh -nNT -R 111:localhost:222 -p 222 root @ work-comp», работающая на ноутбуке; у меня настроен sshd прослушать порт 222). Я ожидаю, что при выполнении «ssh -p 111 work-comp» меня перенаправят на порт 222 моего ноутбука, поэтому проблема будет решена.

Фактически, это работает, но только когда я запускаю «ssh -p 111 work-comp» со своего рабочего компьютера. Когда я пытаюсь сделать это с любой другой машины, ssh выдает «ssh_exchange_identification: read: Connection reset by peer»!

Есть идеи, как отладить эту проблему?

Дополнительная информация: После некоторой дополнительной отладки я обнаружил, что эта проблема возникает, только когда я пытаюсь подключиться с компьютеров сети, в которой я сейчас нахожусь. Когда я пробую это с машин из сети, в которой находится рабочий компьютер (я могу подключиться к некоторым из них удаленно), все в порядке. Может быть, что-то происходит, когда идентификационные пакеты передаются из одной сети в другую?

Выходные данные клиента ssh:

user@some-machine:~> ssh -vvv -p 111 work-comp
OpenSSH_7.2p2, OpenSSL 1.0.2j-fips  26 Sep 2016
debug1: Reading configuration data /home/<user>/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug2: resolving "work-comp" port 111
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to work-comp [work-comp] port 111.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/<user>/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/<user>/.ssh/id_rsa-cert type -1
debug1: identity file /home/<user>/.ssh/id_dsa type 2
debug1: key_load_public: No such file or directory
debug1: identity file /home/<user>/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/<user>/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/<user>/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/<user>/.ssh/id_ed25519 type 4
debug1: key_load_public: No such file or directory
debug1: identity file /home/<user>/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2
ssh_exchange_identification: read: Connection reset by peer

Вывод сервера ssh (в режиме отладки):

user@laptop:~> sudo /usr/sbin/sshd -D -ddd
debug2: load_server_config: filename /etc/ssh/sshd_config
debug2: load_server_config: done config len = 624
debug2: parse_server_config: config /etc/ssh/sshd_config len 624
debug3: /etc/ssh/sshd_config:13 setting Port 222
debug3: /etc/ssh/sshd_config:27 setting HostKey /etc/ssh/ssh_host_ed25519_key
debug3: /etc/ssh/sshd_config:54 setting AuthorizedKeysFile .ssh/authorized_keys
debug3: /etc/ssh/sshd_config:72 setting PasswordAuthentication no
debug3: /etc/ssh/sshd_config:106 setting UsePAM yes
debug3: /etc/ssh/sshd_config:110 setting GatewayPorts yes
debug3: /etc/ssh/sshd_config:111 setting X11Forwarding yes
debug3: /etc/ssh/sshd_config:113 setting X11UseLocalhost no
debug3: /etc/ssh/sshd_config:117 setting TCPKeepAlive yes
debug3: /etc/ssh/sshd_config:119 setting UsePrivilegeSeparation sandbox
debug3: /etc/ssh/sshd_config:122 setting ClientAliveInterval 60
debug3: /etc/ssh/sshd_config:123 setting ClientAliveCountMax 3
debug3: /etc/ssh/sshd_config:135 setting Subsystem sftp /usr/lib/ssh/sftp-server
debug3: /etc/ssh/sshd_config:138 setting AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
debug3: /etc/ssh/sshd_config:139 setting AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
debug3: /etc/ssh/sshd_config:140 setting AcceptEnv LC_IDENTIFICATION LC_ALL
debug1: sshd version OpenSSH_7.2, OpenSSL 1.0.2j-fips  26 Sep 2016
debug1: private host key #0: ssh-ed25519 SHA256:<some number>
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-D'
debug1: rexec_argv[2]='-ddd'
debug3: oom_adjust_setup
debug1: Set /proc/self/oom_score_adj from 0 to -1000
debug2: fd 3 setting O_NONBLOCK
debug1: Bind to port 222 on 0.0.0.0.
Server listening on 0.0.0.0 port 222.
debug2: fd 4 setting O_NONBLOCK
debug3: sock_set_v6only: set socket 4 IPV6_V6ONLY
debug1: Bind to port 222 on ::.
Server listening on :: port 222.
debug3: fd 5 is not O_NONBLOCK
debug1: Server will not fork when running in debugging mode.
debug3: send_rexec_state: entering fd = 8 config len 624
debug3: ssh_msg_send: type 0
debug3: send_rexec_state: done
debug1: rexec start in 5 out 5 newsock 5 pipe -1 sock 8
debug1: inetd sockets after dupping: 3, 3
Connection from ::1 port 54990 on ::1 port 222
^C

На всех рассматриваемых машинах установлен openSUSE 42.3 (x86_64) с установленным OpenSSH 7.2. Аутентификация настроена на использование ключей ed25519.

1 ответ1

0

Вы можете в определенной степени проверить свои туннели в каждой системе, запустив netstat для просмотра открытых портов.

Например, я настроил обратный туннель для тестирования:

user@computer1:~ $ ssh -nNT -R 12345:localhost:22 computer2

Затем я проверяю порты на компьютере2. Флаг -l перечисляет только прослушивающие порты, флаг -t будет показывать только порты tcp (такие как ssh).

user@computer2:~ $ netstat -l -t
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp        0      0 localhost:12345         0.0.0.0:*               LISTEN         
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 localhost:12345         [::]:*                  LISTEN

Отсюда видно, что не так с обратным туннелем: он прослушивает только локальный хост (т. Е. Интерфейс обратной связи). Если бы он слушал на всех интерфейсах, я бы увидел 0.0.0.0:12345 для ipv4 и [::]:12345 для ipv6.

Когда вы запускаете ssh -p 111 work-comp из work-comp, он принимает соединение от localhost, но когда вы запускаете ту же команду с внешнего компьютера, work-comp фактически не прослушивает соединения с этого компьютера. порт.

Вы можете создать другой туннель от «some-machine» до правильного порта «work-comp» или использовать ProxyCommand для подключения к «laptop» через «work-comp».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .