Как настроить переадресацию ssh, если для параметра AllowTcpForwarding установлено значение no?

Для этого есть как минимум два способа:

  1. Взгляните на http://ipxe.org/appnote/work_around_bios_halting_on_ipxe_exit# examples , одна из этих команд может сработать для вас:

     chain $ {server} /grub4dos.exe --config-file = "find --set-root / BOOTMGR; chainloader / BOOTMGR" {{1} } chain $ {server} /grub4dos.exe --config-file = "root (hd0,1); chainloader +1" 
     
  2. В настоящее время я использую следующее, поскольку я построил это, прежде чем я обнаружил, что страницу в GRUB4DOS на сайте iPXE. Создайте ISO-образ, содержащий ISOLINUX и эту конфигурацию:

     NOESCAPE 1 
    PROMPT 0 
    ALLOWOPTIONS 0 
     
    DEFAULT chain-hd0-2 
    LABEL chain-hd0-2 
    СКАЗАТЬ Цепочку hd0 2 ... 
    COM32 chain.c32 
    ДОБАВИТЬ hd0 2 
     

    И загрузить его, используя (у вас чтобы использовать здесь 0x81, потому что по умолчанию используется 0x80, который переопределяет локальный диск):

     sanboot --drive 0x81 $ {server} /chain-hd0-2.iso 
     

4
24.11.2017, 03:38
3 ответа

Пока можно выполнитьsocatлокально и наgateway(или даже просто bashи catна gateway, см. последний пример! )и разрешено не использовать pty для очистки 8 бит, можно установить туннель через ssh. Вот 4 примера, улучшающие предыдущий:

Базовый пример, работающий один раз

(для его разветвления потребуется одно соединение ssh на туннель, что не очень хорошо ).Необходимость избежать :для того, чтобы socat принял команду exec:

терм1:

$ socat tcp-listen:12345,reuseaddr exec:'ssh user1@gateway exec socat - tcp\:devbox\:22',nofork

терм2:

$ ssh -p 12345 user2@localhost

терм1:

user1@gateway's password:

терм2:

user2@localhost's password: 

Замена первого и второго адреса делает сокет немедленно доступным

socatдолжен оставаться главным, так что нетnofork:

терм1:

    $ socat exec:'ssh user1@gateway exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
    user1@gateway's password:

терм2:

    $ ssh -p 12345 user2@localhost
    user2@localhost's password:

ИспользованиеControlMasterssh

позволяет разветвляться, используя только одно ssh-подключение к шлюзу, что дает поведение, похожее на обычную переадресацию портов:

терм1:

    $ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket user1@gateway
    user1@gateway's password:

терм2:

    $ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket user1@gateway exec socat - tcp\:devbox\:22'

терм3:

    $ ssh -p 12345 user2@localhost
    user2@localhost's password:

Наличие только bashи catнаgateway

При использованииbashвстроенного -в перенаправлении tcp и двух полудуплексных -дуплексных catкоманд (для полного -дуплексного результата )не даже нужен пульт socatили netcat. Обработка нескольких уровней вложенных и экранированных кавычек была немного неудобной, и, возможно, ее можно было бы сделать лучше или упростить с помощью удаленного сценария bash. Необходимо позаботиться о том, чтобы разветвление catиспользовалось только для вывода :

.

терм1 (без изменений):

$ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket user1@gateway
user1@gateway's password:

терм2:

$ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket user1@gateway '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'

терм3:

$ ssh -p 12345 user2@localhost
user2@localhost's password:
7
27.01.2020, 20:59

Я бы просто настроил другой sshd для работы на другом порту.
Измените настройки, чтобы разрешить tcpforwarding.

cp /etc/ssh/sshd{,-second}_config 

Редактировать sshd -второй _конфиг

Port 22220
cp /usr/lib/systemd/system/sshd.service  /etc/systemd/system/sshd-second.service

Измените /etc/systemd/system/sshd -second.service следующим образом:

Description=OpenSSH server second instance daemon
ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd-second_config $OPTIONS

Строка ExecStart может отличаться в зависимости от версии.

systemctl daemon-reload
systemctl enable sshd-second.service --now

Дополнительную информацию можно найти здесь :
https://access.redhat.com/solutions/1166283

Теперь вы сможете пересылать все, что захотите.

0
27.01.2020, 20:59

Заменить ProxyJump на Bash

Идея выше хороша! Вот моя общая версия конфигурации ssh _, когдаProxyJumpне работает , потому что для AllowTcpForwarding установлено значение no, а моя оболочка по умолчанию — BASH:

ProxyCommand=ssh -T user1@gateway "exec 3<>/dev/tcp/%h/%p 2<&- ; cat <&3 & cat >&3 ; kill $!"
  • -T Отключить назначение псевдо-терминалов -
  • exec Новый процесс (bash )не будет создан
  • 3<> — это просто перенаправление на доступный файловый дескриптор
  • /dev/tcp/... попросит bash открыть соответствующий сокет TCP.
  • %h и %p будут оцениваться вашим клиентом OpenSSH как devbox и 22
  • 2<&-закроет STDERR (вы также можете перенаправить его в /dev/null)
  • cat <&3 & будет читать выбранный файловый дескриптор 3 в фоновом режиме
  • cat >&3 выведет наш файловый дескриптор на передний план
  • убить $! убьет команду «чтение» cat <&3 , работающую в фоновом режиме, когда вы закроете/разорвете соединение. В противном случае он продолжал бы работать.

Он мог бы заменить ProxyJump для меня в ситуациях, когда он был отключен на сервере перехода, но я действительно не хотел пересылать туда свой закрытый ключ или вводить какие-либо пароли без дополнительного уровня шифрования. Использование других SSH _AUTH _SOCK в качестве root или полная запись сеансов терминала с помощью нажатия клавиш — это реальные вещи.

Но, пожалуйста, всегда следите за тем, чтобы не нарушать применимые к вам политики!

4
17.07.2020, 08:51

Теги

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