Почему xargs -0 добавляет лишнюю пустую строку?

Пока можно выполнить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:

0
21.02.2021, 23:40
0 ответов

Теги

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