Пока можно выполнить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:
ControlMaster
ssh позволяет разветвляться, используя только одно 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: