Теперь более подробно.
Сначала с внутренней машины соединитесь с внешней (здесь и далее внутренняя и внешняя относительно firewall) и войдите в систему.
Так как вы используете linux, вы будете использовать файловую систему proc (смотрите далее), удостоверьтесь, что shell - это shell типа sh (bash, zsh и т.д.) . Например, если у вас csh, то установите связь telnet следующей командой:
(setenv SHELL /bin/sh; telnet machine.outside) |
После вхождения в систему внешней машины, выполните команду
term -r -n off telnet |
теперь выйдите в командную строку telnet на внутренней машине, используя ^] (или как у вас настроено), и, при помощи команды !, запустите term,
telnet> ! term -n on telnet >&3 <&3 |
Получилось!!!
(Если у вас нестандартная версия telnet, то вам надо использовать другой дескриптор файла (у меня он 3); его можно легко определить при помощи strace. Но тройка, по-моему, работает на всех bsd-совместимых telnet клиентах, я пробовал на SunOS 4.x и обычных дистрибутивах linux.)
Некоторые клиенты telnet не имеют команды "!", которая запускает внешнюю команду оболочки. Например, telnet-клиент в дистрибутиве Slackware 3.0 именно такой. Исходники (не уверен на 100%) этого клиента лежат на
ftp://ftp.cdrom.com:/pub/linux/slackware-3.0/source/n/tcpip/NetKit-B-0.05.tar.gz |
ftp://ftp.nec.com/pub/security/socks.cstc/socks.cstc.4.2.tar.gz |
ftp://ftp.nec.com/pub/security/socks.cstc/export.socks.cstc.4.2.tar.gz |
Если у вас ядро до 1.2.13, вы можете приостановить telnet командой ^]^z, затем выяснить его идентификатор процесса и дать команду
term -n on -v /proc/<telnetpid>/fd/3 telnet |