Posso executar um telnetd one-shot sem prompt de login?


0

Em outras palavras, eu quero algo como telnetd que eu inicio do meu shell para ligar a um IP específico e atender uma conexão. Eu não quero um prompt de login.

Basicamente, quero que outra máquina execute alguns comandos nesta máquina. Ele está diretamente conectado, por isso não quero senhas ou criptografia. Além disso, não possui teclado ou SSH instalado.

Respostas:


2

Eu desenvolvi o desejo de fazer a mesma coisa há alguns anos. Eu uso muito o Cygwin no Windows, e ser capaz de abrir simples janelas telnet de disparo único pode ser bom.

Eu não encontrei nenhuma maneira de fazer isso fora da caixa. Eventualmente, eu copiei a fonte do TELNETD e hackeei algumas partes importantes. Ele não faz login e só aceita uma conexão.

Isso requer que você mexa com o GCC. Eu só fiz isso no cygwin, mas também deveria funcionar no linux. Veja os DIFFs de origem aqui:

DIFF para telnetd.c

83a84
> int be_promiscuous = 0;
133c134
< int debug = 0;
---
> int debug = 1;
145c146
<       'd', ':', 'h', 'k', 'n', 'S', ':', 'u', ':', 'U',
---
>       ':', 'h', 'k', 'n', 'S', ':', 'u', ':', 'U',
169a171
>       'g',
239c241
<               case 'd':
---
> /*            case 'd':
245,246c247,248
<                       /* NOTREACHED */
<                       break;
---
>                       /* NOTREACHED * /
>                       break; */
340a343,345
>               case 'g':
>                       be_promiscuous = 1;
>                       break;
395c400
<           if (argc > 1) {
---
>           if (argc != 1) {
417a423
>           if (!be_promiscuous) inet_aton("127.0.0.1",&sin.sin_addr);
546c552
<       fprintf(stderr, "Usage: telnetd");
---
>       fprintf(stderr, "Usage: telnetdeasy");
553c559,560
<       fprintf(stderr, " [-debug]");
---
> /*    fprintf(stderr, " [-debug]"); */
>       fprintf(stderr, " [-g]");
585c592
<       fprintf(stderr, " [port]\n");
---
>       fprintf(stderr, " port\n");
832c839
<        *      set ttyp line security label
---
>        *      set ttyp line security label
1177c1184
<       if (hostinfo && *IM)
---
>       if (*IM)
1447c1454
<
---
>
1523c1530
<                       ixon = tp->c_iflag & IXON;
---
>                       ixon = tp->c_iflag & IXON;

DIFF para sys_term.c

42a43,46
> #include <pwd.h>
>
> extern void
>       start_shell P((char *, int, char *));
1127c1131
<       if (ioctl(t, I_PUSH, "ptem") < 0)
---
>       if (ioctl(t, I_PUSH, "ptem") < 0)
1451c1455,1456
<               start_login(host, autologin, autoname);
---
>               start_shell(host, autologin, autoname);
>               /*start_login(host, autologin, autoname);*/
1560a1566,1614
>  * start_shell(host, autologin, name)
>  *
>  * Assuming that we are now running as a child processes, this
>  * function will turn us into the login process.
>  */
>       void
> start_shell(host, autologin, name)
>       char *host;
>       int autologin;
>       char *name;
> {
>       char *cp, *st, *ar;
>       char **argv;
>       char **addarg();
>       extern char *getenv();
>       struct passwd * uinfo = getpwuid(geteuid());
>
>       cp = uinfo ? uinfo->pw_shell : NULL;
>       if (!cp || !strlen(cp)) cp = "/bin/sh";
>       st = strrchr(cp,'/'); st = st ? st+1 : 0;
>       if (!st || !strlen(st)) st = "sh";
>
>       strcpy( ar = (char*)malloc(strlen(st)+2), "-");
>       strcat(ar,st);
>
>       argv = addarg(0, ar);
>
>       unsetenv("IFS");
>
>       closelog();
>
>       /*
>        * This sleep(1) is in here so that telnetd can
>        * finish up with the tty.  There's a race condition
>        * the login banner message gets lost...
>        */
>       sleep(1);
>
>       execv(cp, argv);
>
>       syslog(LOG_ERR, "%s: %m\n", cp);
>       fatalperror(net, cp);
>       /*NOTREACHED*/
> }
>
>
>
>
> /*
1669c1723
<       } else
---
>       } else
2243c2297
<
---
>

Isso só funciona com redes IPv4, eu acho. Eu deletei a opção "-d" e adicionei uma opção "-g". Este hack do telnetd leva um único argumento numérico, que é a porta de escuta. Sem o argumento "-g", ele se liga a 127.0.0.1, caso contrário, ele se liga globalmente.


0

Sob MacOS você pode executar

/ usr / libexec / telnetd -debug -U 10023

Isto lhe dará uma sessão única na porta 10023, ainda que com login. De acordo com a manpage, supõe-se que haja um parâmetro -a para credenciais (fornecendo -a nenhum), mas isso não parece funcionar aqui, embora possa funcionar no Linux (você não especificou qual sistema operacional está usando).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.