Как заставить telnet отправлять текст и оставаться на связи? - PullRequest
0 голосов
/ 06 июля 2019

для своей работы мне нужно каждый день подключаться к множеству разных серверов: telnet на хост, ввести имя пользователя, ввести пароль - начать работу. Теперь я хотел упростить жизнь, автоматически введя имя пользователя - мне удалось это сделать, но после этого telnet завершил работу, очевидно, это не то, что я хотел.

Я работаю из системы с BASH и не могу установить там какие-либо программы, поэтому , пожалуйста, не отвечайте, как "Используйте ожидаемо, что легко решит вашу проблему ..."

Мои попытки привели меня к этому:

function tn() { (echo "user"
                sleep 1) | telnet $1 23
        }

Вызов функции с помощью tn 123.45.67.89 подключается к серверу по номеру 123.45.67.89, где запрашивается имя пользователя, которое вводится автоматически - отлично! Но затем спрашивается пароль, и вместо того, чтобы позволить мне ввести его и начать работу, соединение закрывается.

Я действительно надеюсь, что кто-то знает решение для этого! Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

telnet предназначен для интерактивного использования. Используйте netcat, ncat, nc, socat или любой другой инструмент этого семейства.

Пример:

( echo "user"; sleep 1) | ncat $1 23 

Но если вы хотите смоделировать интерактивное поведение, используйте socat и перенаправьте stdin + stdout в скрипт:

Пример:

socat TCP:$1:23 EXEC:my-shell.sh

В этом случае устанавливается TCP-соединение для адреса $ 1, порт 23, и stdin + stdout перенаправляются на stdout + stdin скрипта. См. man socat для получения подробной информации и дополнительных параметров.

my-shell.sh выглядит, например, как:

#!/bin/sh

read line
do_domething "$line"
printf "reply\n"

read line
do_domething "$line"
printf "reply\n"

Кстати, я ничего не тестировал (только что записал)

0 голосов
/ 06 июля 2019

Возможно, вы захотите взглянуть на команду expect для сценариев взаимодействия с telnet:

#!/usr/bin/env bash

function tn() {

  expect -f <<EOF
spawn telnet $1
expect "login"
send "${2}\r"
interact 
EOF
}

...