Невозможно получить доступ к порту передачи ssh

С веб-сайта GCC :

Поскольку окончательный стандарт ISO C ++ 14 был опубликован только недавно, поддержка GCC является экспериментальной

Чтобы включить поддержку C ++ 14, добавьте параметр командной строки -std = c ++ 14 для командной строки g ++. Или, чтобы включить расширения GNU в дополнение к расширениям C ++ 14, добавьте -std = gnu ++ 14.

В вашем случае, пробовали ли вы использовать параметр -std = gnu14 , чтобы убедиться, что он работает?

Функции C ++ 14 стали доступны из GCC 4.8, поэтому в вашем случае у вас должны быть поддержка для этого.

На странице руководства g ++ я обнаружил следующее:

c ++ 1y Следующая версия стандарта ISO C ++, ориентировочно запланированная на 2014 год. Поддержка носит экспериментальный характер и будет практически определенно изменится несовместимым образом в будущих выпусках.

gnu ++ 1y Диалект GNU для -std = c ++ 1y. Поддержка носит экспериментальный характер и почти наверняка изменится несовместимым образом в будущих выпусках.

Похоже, что можно использовать не c ++ 14 , а c ++ 1y , попробуйте.


ps : я использую более новую версию, чем ваша, и это параметры, которые у меня есть для g ++

$  g++ --version
g++ (GCC) 4.9.1 20140922 (Red Hat 4.9.1-10)

2
29.04.2019, 14:35
4 ответа

Вы немного запутались в том, какие IP-адреса использовать. При переадресации портов есть две пары IP/портов:

<from IP>:<from PORT>:<to IP>:<to PORT>

Если вы устанавливаете только один IP-адрес, это читается как

<from PORT>:<to IP>:<to PORT>

Это сбивает с толку, потому что «от ip от порта» к клиенту ssh и «от ip к порту» исходят от сервера.

Попробуйте это с сервера А:

ssh -N -f -L 2222:localhost:22 admin@10.10.10.1

Затем вы можете

ssh  43.24.24.29:2222

Это работает, потому что SSH-соединение осуществляется от сервера A к серверу B. Таким образом, в приведенной выше команде «localhost» относится к серверу B.

0
27.01.2020, 22:27

Когда вы делаете переадресацию для удаленного хоста, вы должны выполнить переадресацию удаленного порта с параметром-R вместо -L, что сделает туннель локально (localhost ); в противном случае все туннели, которые вы будете создавать, будут указывать на локальный хост. Более того, вы должны быть уверены, что у вас установлен параметр GatewayPorts yesв файле /etc/sshd_configсервера 10.10.10.1 , иначе он не сделает форвардинг.

Попробуйте это, убедившись, что для параметра GatewayPorts задано значение yes:

ssh -N -f admin@10.10.10.1 -R 222:43.24.24.29:22

А затем (ОТРЕДАКТИРОВАНО):

ssh admin@10.10.10.1 -p 222
0
27.01.2020, 22:27

Ошибка при первой попытке связана с тем, что ваша команда заставила ServerA прослушивать только 127.0.0.1, который является так -называемым адресом «localhost», то есть адресом, доступным только самому себе. На практике вы можете получить доступ к порту 222 ServerA только с самого ServerA.

Кроме того, при указании -L 222:43.24.24.29:22сервер B (10.10.10.1 )будет подключаться обратно к порту 22 сервера A. Полагаю, это не очень полезно.

Ваша вторая попытка (EDIT -01 )лучше, но она по-прежнему заставляет ServerA прослушивать только локальный хост. Таким образом, я не могу представить, какой процесс мог получить это соединение с портом 2222 ServerA, явно не с сервером ssh. Вам может потребоваться killвсе ssh -N...команды, которые могут присутствовать на вашем сервере A из ваших предыдущих неудачных попыток, а также убедитесь, что вы используете порт (2222 в примере ), который не должен быть уже занят. использовать.

Учитывая все это, вам нужно:

[ldl@ ServerA ~]$ ssh -N -f -L :2222:localhost:22 admin@10.10.10.1

Приведенное выше указывает ServerA настроить порт 2222 (выше 1023, вам не нужно запускать его черезsudo)для прослушивания на все его адреса (обратите внимание на :перед 2222 )и используйте специально установленное соединение с admin@10.10.10.1 (ServerB )для подключения к порту 22 ServerB «localhost» .

Вот как работает -L:вы сначала сообщаете, какой адрес и порт(:2222в приведенном выше примере )вы хотите настроить на «локальной машине» (ServerA в приведенном выше примере )и где вы хотите подключить удаленную машину . «Удаленная машина» — это та, к которой подключается команда ssh с частью синтаксиса admin@10.10.10.1.

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

Поэтому, если все, что вам нужно сделать, это использовать сервер A в качестве перехода к серверу B для ваших самолетов -MBP, я бы посоветовал вам просто:

ssh -t root@43.24.24.29 'ssh admin@10.10.10.1'

напрямую с самолетов -MBP.

0
27.01.2020, 22:27

В исходной попытке было две проблемы:

[ldl@ServerA ~]$ sudo ssh -N -f -L 222:43.24.24.29:22 admin@10.10.10.1

При этом SSH запускается от имени root, поэтому ограничение на прослушивание только локальных портов с номерами >=1024 не применяется. Но поскольку вы не указали bind_address, клиент SSH следовал настройке по умолчанию GatewayPorts на стороне клиента -, которая предназначена для прослушивания только на локальном хосте, и поэтому вам не удалось подключиться к нему со своего ПК.

Кроме того, вы указали удаленный конец туннеля как 43.24.24.29 :22, поэтому, даже если бы вы могли использовать туннель, он просто подключился бы обратно к серверу A sshd.

Чтобы это исправить:

[ldl@ServerA ~]$ sudo ssh -N -f -L "*:222:localhost:22" admin@10.10.10.1

Дополнительная часть *:указывает клиенту SSH разрешать подключения к туннелю с любого IP-адреса, а не только с локального хоста. Добавлены двойные кавычки, чтобы оболочка не выполняла подстановочные знаки для звездочки. И назначение туннеля «localhost :22» применяется на удаленном конце этого SSH-соединения, которое уже будет на сервере B.

Затем вы сможете сделать это на своем ПК:

aircrafts-MBP:~ ldl$ ssh root@43.24.24.29 -p 222
...possibly a SSH host key warning and/or a password prompt...
[root@ServerB ~]#

Если нет необходимости специально использовать порт 222,использование номера порта больше 1023 устранит необходимость в sudo.

[ldl@ServerA ~]$ ssh -N -f -L "*:2222:localhost:22" admin@10.10.10.1

aircrafts-MBP:~ ldl$ ssh root@43.24.24.29 -p 2222
...possibly a SSH host key warning and/or a password prompt...
[root@ServerB ~]#

Есть и другой способ снять шкуру с этой кошки. Вы можете сделать это на своем ПК:

aircrafts-MBP:~ ldl$ ssh -L 2222:10.10.10.1:22 ldl@43.23.23.39
[ldl@ServerA ~]$

... чтобы получить пригодную для использования оболочку на сервере A, а также перенаправить на сервер B.

А затем в другом окне терминала:

aircrafts-MBP:~ ldl$ ssh -p 2222 root@localhost
...possibly a SSH host key warning and/or a password prompt...
[root@ServerB ~]#

В этом наборе -первый сеанс SSH на ПК устанавливает прослушивающий прокси-сервер в протоколе TCP/2222 на ПК, перенаправляет весь трафик на сервер A, а затем устанавливает «обычное» TCP-соединение с сервера A на порт. 22 сервера ServerB для передачи трафика, поступающего на порт прослушивания клиента. Но поскольку второй сеанс с использованием прокси-сервера также является сеансом SSH, переход с ПК на сервер A будет осуществляться по SSH -внутри -SSH, а с сервера A на сервер B будет просто по SSH.

0
27.01.2020, 22:27

Теги

Похожие вопросы