Действительно ли возможно передать запросы ssh, которые входят по определенному порту к другой машине?

В статье Все, что вам нужно знать о ошибке ExpressionChangedAfterItHasBeenCheckedError , объясняет поведение в деталях.

Проблема с настройкой заключается в том, что ngAfterViewInit выполненные после изменения обнаружения обработанных обновлений DOM. И вы эффективно меняете свойство, которое используется в шаблоне в этом хук, что означает, что DOM необходимо повторно отобразить:

  ngAfterViewInit() {
    this.message = 'all done loading :)'; // needs to be rendered the DOM
  }

, и для этого потребуется другой цикл обнаружения изменений и угловой по дизайну (g6)

      обновляет свойство асинхронно либо с помощью setTimeout, Promise.then, либо с асинхронными наблюдаемыми ссылками в шаблоне
    • выполнить обновление свойства в hook перед обновлением DOM - ngOnInit, ngDoCheck, ngAfterContentInit, ngAfterContentChecked.

5
задан Paul Wicks 5 September 2008 в 04:30
поделиться

6 ответов

Другой способ пойти состоял бы в том, чтобы использовать ssh, туннелирующий (который происходит на стороне клиента).

Вы сделали бы команду ssh как это:

ssh -L 8022:myinsideserver:22 paul@myoutsideserver

Это подключает Вас к машине, это доступно с внешней стороны (myoutsideserver) и создает туннель посредством того соединения SSH для портирования 22 (стандарт ssh порт) на сервере, это только доступно с внутренней части.

Затем Вы сделали бы другую команду ssh как это (отъезд первого, все еще соединенного):

ssh -p 8022 paul@localhost

То соединение с портом 8022 на Вашем localhost будет затем туннелировано посредством первого соединения SSH, берущего Вас по myinsideserver.

Может быть что-то, что необходимо сделать на myoutsideserver, чтобы позволить передавать ssh порта. Я перепроверяю это теперь.

Править

Хм. В ssh странице справочника говорится это: ** Только суперпользователь может передать привилегированные порты. **

Такой подразумевает мне, что первое соединение SSH должно быть как корень. Возможно, кто-то еще может разъяснить это.

Похоже, что полномочия суперпользователя не требуются, пока переданный порт (в этом случае, 8022) не является привилегированным портом (как 22). Спасибо за разъяснение Mike Stone.

11
ответ дан 18 December 2019 в 09:11
поделиться

@Mark Biek

Я собирался сказать это, но Вы побеждаете меня к нему! Так или иначе я просто хотел добавить, что существует также-R опция:

ssh -R 8022:myinsideserver:22 paul@myoutsideserver

Различие - то, с какой машиной Вы соединяетесь. Мой босс показал мне этот прием не слишком долго назад, и определенно действительно хорошо знать..., что мы были позади брандмауэра и должны были предоставить внешний доступ к машине... он обошел его ssh-R к другой машине, которая была доступна... затем, соединения с той машиной были переданы в машину позади брандмауэра, таким образом, необходимо использовать-R или-L, на основе которой машины Вы идете и к которому Вы являетесь ssh-лугом.

Кроме того, я вполне уверен, Вы в порядке для использования обычного пользователя пока порт, который Вы передаете (в этом случае, 8 022 порта) не ниже ограниченного диапазона (который я думаю, 1024, но я мог ошибиться), потому что это - "зарезервированные" порты. Не имеет значения, что Вы передаете его "ограниченному" порту, потому что тот порт не открывается (машине просто отправляли трафик в него через туннель, это не знает о туннеле), при этом 8 022 порта IS открыты и ограничены как таковой - также.

Править: Просто помните, туннель только открыт, пока начальная буква ssh остается открытой, поэтому если это испытает таймаут, или Вы выходите из него, то туннель будет закрыт.

3
ответ дан 18 December 2019 в 09:11
поделиться

Можно использовать Порт Fowarding, чтобы сделать это. Смотрите здесь:

http://portforward.com/help/portforwarding.htm

Существуют инструкции относительно того, как настроить Ваш маршрутизатор к порту, передают запрос на этой странице:

http://www.portforward.com/english/routers/port_forwarding/routerindex.htm

0
ответ дан 18 December 2019 в 09:11
поделиться

(В этом примере я предполагаю, что порт 2222 перейдет к Вашему внутреннему узлу. $externalip и $internalip являются IP-адресами или именами хостов видимой и внутренней машины, соответственно.)

У Вас есть несколько опций, в зависимости от того, как постоянный Вы хотите, чтобы проксирование было:

  • Своего рода прокси TCP. На Linux основная идея состоит в том, что, прежде чем входящий пакет обрабатывается, Вы хотите изменить его место назначения — т.е. предварительная маршрутизация целевого NAT:

    iptables -t nat -A PREROUTING -p tcp -i eth0 -d $externalip --dport 2222 --sport 1024:65535 -j DNAT --to $internalip:22

  • Используя SSH для установления временного перенаправления портов. Отсюда, у Вас есть две опции снова:

    • Прозрачный прокси, где клиент думает, что Ваш видимый хост (на порте 2222) является просто нормальным сервером SSH и не понимает, что проходит. В то время как Вы теряете некоторый мелкомодульный контроль, Вы получаете удобство (особенно, если Вы хотите использовать SSH для передачи VNC или X11 полностью к внутреннему хосту).

      • От внутренней машины: ssh -g -R 2222:localhost:22 $externalip
      • Затем от внешнего мира: ssh -p 2222 $externalip

      Заметьте, что "внутренние" и "внешние" машины не должны быть на той же LAN. Можно портировать вперед полностью во всем мире этот путь.

    • Принуждение входа в систему внешней машины сначала. Это - истинная "передача", "не проксирование"; но основная идея - это: Вы вынуждаете людей войти в систему внешней машины (таким образом, Вы управляете на том, кто может войти в систему и когда, и Вы получаете журналы действия), и оттуда они могут SSH до внутренней части. Это походит на тяжелую работу, но если Вы настраиваете простые сценарии оболочки на внешней машине с названиями Ваших внутренних узлов, вместе с паролем меньше пары ключей SSH затем, это очень просто для пользователя для входа в систему. Так:

      • На внешней машине Вы делаете простой сценарий, /usr/local/bin/internalhost который просто работает ssh $internalip
      • От внешнего мира пользователи делают: ssh $externalip internalhost и после того как они входят в систему первой машины, они сразу передаются до внутреннего.

      Другое преимущество для этого подхода состоит в том, что люди не получают проблемы управления ключами, начиная с выполнения двух сервисов SSH на один IP-адрес сделает клиент SSH сердитым.

К вашему сведению, если Вы хотите к SSH к серверу, и Вы не хотите волноваться о ключах, делать это

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

У меня есть псевдоним в моей оболочке, названной "nossh", таким образом, я могу просто сделать nossh somehost и это проигнорирует все ключевые ошибки. Просто поймите игнорирование информации о безопасности, когда Вы делаете это, таким образом, существует теоретический риск.

Большая часть этой информации от доклада, который я сделал в Бангкоке Barcamp всем о необычных приемах SSH. Вы видите мои слайды, но я рекомендую текстовую версию, поскольку слайды S5 являются видом багги. Проверьте раздел, названный "Вперед Что-либо: Простое Перенаправление портов" для получения информации. Существует также информация о создании прокси SOCKS5 с OpenSSH. Да, можно сделать это. OpenSSH является потрясающим как этот.

(Наконец, если Вы делаете большое пересечение во внутреннюю сеть, рассматриваете установку VPN. Это звучит страшным, но OpenVPN довольно прост и работает на всех Ose. Я сказал бы, что это - излишество только для SSH; но после того как Вы запускаете перенаправление портов через свой порт вперед для получения VNC, HTTP или другого случая материала; или если у Вас есть много внутренних узлов для волнения о, это может быть более простым и более удобным в сопровождении.)

4
ответ дан 18 December 2019 в 09:11
поделиться

В Ubuntu можно установить Firestarter и затем использовать, это - функция Forward Service для передачи трафика SSH от нестандартного порта на машине с внешним доступом к порту 22 на машине в сети.

На OS X можно отредактировать/etc/nat/natd.plist файл для включения порта fowarding.

0
ответ дан 18 December 2019 в 09:11
поделиться

Не бездельничая с правилами брандмауэра, можно настроить ~/.ssh/config файл.

Примите 10.1.1.1, система 'шлюза', и 10.1.1.2 'клиентская' система.

Host gateway
  Hostname 10.1.1.1 
  LocalForward 8022 10.1.1.2:22 

Host client
  Hostname localhost
  Port 8022

Можно открыть соединение SSH для 'шлюза' через:

ssh gateway

В другом терминале откройте соединение с клиентом.

ssh client
0
ответ дан 18 December 2019 в 09:11
поделиться
Другие вопросы по тегам:

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