Друзья часто просят меня помочь с небольшими проблемами Linux, и чаще всего от меня требуется войти в удаленную систему. Обычно возникает много проблем с созданием учетной записи и входом в систему (иногда ящик находится за устройством NAT, иногда SSHD не установлен и т. Д.), Поэтому я обычно просто прошу их создать оболочку обратного подключения с помощью netcat ( nc -e / bin / bash). Если у них нет netcat, я могу просто попросить их взять копию статически скомпилированного двоичного файла, который не так сложно и не требует много времени для загрузки и запуска.
Хотя это работает достаточно хорошо, чтобы я мог вводить простые команды, я не могу запускать какие-либо приложения, требующие tty (например, vi), и не могу использовать какие-либо функции управления заданиями. Мне удалось обойти эту проблему, запустив in.telnetd с несколькими аргументами в оболочке обратного подключения, которая назначила бы мне терминал и перетащила меня в оболочку. К сожалению, in.telnetd обычно не устанавливается по умолчанию в большинстве систем.
Какой самый простой способ получить полнофункциональную оболочку терминала с обратным подключением, не требуя каких-либо нестандартных пакетов?
(Небольшая программа на C, которая выполняет эту работу, тоже подойдет, я просто не могу найти много документации о том, как назначается / выделяется TTY. Решение, которое не требует, чтобы я просматривал исходный код для SSHD и TELNETD было бы неплохо :))
Это не стандартная программа, но "socat tcp: your-host: 1234 exec: bash, pty" выполнит свою работу.
Вы также можете защитить свое общение с OpenSSL с помощью socat:
# Your side: openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem socat `tty`,raw,echo=0 openssl-listen:1237,reuseaddr,cert=cert.pem,verify=0 # Their side: socat openssl-connect:127.0.0.1:1237,verify=0 exec:bash,pty,stderr,setsid
Это обеспечит хороший терминал обратного подключения с шифрованием.
С оговоркой, что незашифрованные оболочки в Интернете - это плохо, это пост обезьяны имеет некоторые методы, которые можно использовать для получения TTY через существующий сеанс оболочки. Скорее всего для работы в любой системе используется Python:
python -c 'import pty; pty.spawn("/bin/sh")'
Замените оболочку на любую по вашему выбору.