Obtendo um TTY em um shell de conexão

5

Frequentemente sou convidado por amigos para ajudar com pequenos problemas do Linux e, na maioria das vezes, é necessário fazer login no sistema remoto. Geralmente há muitos problemas em criar uma conta e fazer login (às vezes a caixa fica atrás de um dispositivo NAT, às vezes o SSHD não é instalado, etc.), então eu normalmente peço que façam um shell de conexão usando netcat ( nc -e / bin / bash). Se eles não têm netcat, posso pedir a eles para pegar uma cópia de um binário compilado estaticamente que não é tão difícil ou demorado para baixar e executar.

Embora isso funcione bem o suficiente para eu inserir comandos simples, não posso executar nenhum aplicativo que exija um tty (vi, por exemplo) e não posso usar nenhuma função de controle de trabalho. Consegui contornar este problema executando o in.telnetd com alguns argumentos dentro do shell de conexão que me designariam um terminal e me colocariam em um shell. Infelizmente o in.telnetd geralmente não é instalado por padrão na maioria dos sistemas.

Qual é a maneira mais fácil de obter um shell de terminal de conexão totalmente funcional sem exigir pacotes não padrão?

(Um pequeno programa em C que faz o trabalho também seria bom, eu simplesmente não consigo encontrar muita documentação sobre como um TTY é atribuído / alocado. Uma solução que não requer que eu use a fonte código para SSHD e TELNETD seria legal:))

    
por Asad R. 13.01.2010 / 15:03

2 respostas

4

Com a ressalva de que os shells não criptografados na Internet são uma coisa ruim, esse post pentestmonkey tem algumas técnicas que podem ser usadas para obter um TTY sobre uma sessão de shell existente. O mais provável para trabalhar em qualquer sistema usa Python:

python -c 'import pty; pty.spawn("/bin/sh")'

Substitua o shell por um de sua preferência.

    
por 01.04.2013 / 18:28
6

Não é um programa padrão, mas "socat tcp: seu-host: 1234 exec: bash, pty" fará o trabalho.

Você também pode proteger sua comunicação com o OpenSSL com 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

Isso fornecerá um bom terminal de conexão com criptografia.

    
por 24.03.2010 / 22:57