Telnet以用户名和密码登录邮件服务器

时间:2015-01-14 10:44:37

标签: linux bash shell telnet

我在尝试通过telnet连接到邮件服务器时遇到了一些问题。我遇到的主要问题是我需要创建一个脚本,将我登录到目的地,我无法找到回应的方法密码。

我尝试了什么:

telnet host -l username ; echo 'password'

仍然要求我输入密码。有什么方法可以解决这个问题,或者我做错了什么?

5 个答案:

答案 0 :(得分:4)

首先,您可以使用eval

eval "{ echo user_name; sleep 1; echo pass; sleep 1; echo '?'; sleep 5; }" | telnet host_address

请务必替换您要运行的user_namepass?以及您的telnet主机正在侦听的host_address;对我来说,这是一个本地知识产权。

编写一组命令并将它们传输到telnet应用程序中非常容易。你需要做的就是这样:

(echo commandname;echo anothercommand) | telnet host_address

唯一的问题是您需要通过的唠叨登录...它不会立即显示。因此,如果您使用“echo admin”然后“回显密码”,它将发生得太快而且不会被发送到服务器。解决方案?使用sleep命令!

添加几个睡眠3命令,等待三秒,解决了问题。首先我们将回显用户名和密码,然后我们将回显reboot命令,每次我们等待三秒钟。最后一个命令将立即重启服务器:

(sleep 3;echo admin;sleep 3;echo mypassword;sleep 3;echo system reboot;sleep 3;) | telnet host_address

您可以将其放入shell脚本并随时运行它。或者您可以将它添加到您的cron中(在OS X或Linux上):

crontab -e

在某处添加此行:

1 7 * * * (sleep 3;echo admin;sleep 3;echo mypassword;sleep 3;echo system reboot;sleep 3;) | telnet host_address

这将在每天早上7:01重新启动路由器。

答案 1 :(得分:2)

AFAIK,你不可能以这种方式自动化telnet。但它仍然有可能 - 即使它是一个非常糟糕的想法(我稍后会详细说明)。

首先为什么尝试失败:

  • 你从stdin(我想终端)发了一个telnet命令,然后写入stdout和stderr(我想也是一个终端)
  • 如果您的telnet最近是合理的,它会尝试保护您的身份验证并从/ dev / tty询问您的密码(出于安全原因)
  • 当该命令结束时,您在自己的终端上编写password

你应该怎么做:

  • 使用自动身份验证禁用启动telnet(我的是telnet -X SRA
  • 使用您要传递的命令提供其输入
  • 在输入输入之前等待一段时间,至少对于登录和密码,因为如果你在阅读之前没有通过telnet清除输入并丢弃你的输入

这是一个允许我telnet到我自己的机器的例子:

sh << EOF | telnet -X SRA localhost
sleep 2
echo my_user_name
sleep 1
echo my_password
# sleep 1 # looks like it can be removed
echo echo foo and bar
sleep 1
EOF

它正确地将我登录到我的框中,执行echo foo and bar(基本命令:-))并断开连接


现在为什么你永远不应该这样做:

  • 您在脚本文件中以明文形式写入密码,这是一种不良的安全措施
  • 如果不打算以这种方式使用,则使用telnet进行批处理:脚本可能无法移植到另一个telnet版本

如果您确实希望以批处理方式将命令传递给远程服务器,则应尝试使用ssh

  • 具有安全处理身份验证的选项(脚本中没有密码,明文中没有任何密码)
  • 旨在以批处理模式和交互方式使用

如果你不能使用ssh(某些系统管理员不喜欢不受控制的输入ssh连接),你也可以尝试使用rsh。它更老,安全性更低,但至少是为批量使用而设计的。

答案 2 :(得分:1)

您是否尝试过使用expect命令?您必须创建一个脚本,以便识别“预期的”#39;服务器的响应,例如&#39;密码:&#39;然后在脚本中提供密码。以下将解释:https://en.wikipedia.org/wiki/Expect - 此处还显示了一个很好的示例:http://en.kioskea.net/faq/4736-shell-script-for-telnet-and-run-commands

答案 3 :(得分:1)

多亏了Harvix的答案,我知道还期望有替代外壳的原生外壳,称为sexpect。从here获取。然后创建此脚本(我称其为telnetpass):

#!/bin/bash
# This script is used for automatically pass authentication by username and password in telnet prompt
# Its goal is similar as sshpass, but for telnet, so I call it telnetpass

. ~/.private/cisco_pw # should contain PASSWORD variable

export SEXPECT_SOCKFILE=/tmp/sexpect-telnetpass-$$.sock
sexpect spawn telnet $1
sexpect expect -cstring 'Username:'
sexpect send -enter $USER 
sexpect expect -cstring 'Password:'
sexpect send -enter $PASSWORD
sexpect interact

然后您可以运行:telnetpass Host125并自动通过身份验证

Trying 198.51.100.78 ...
Connected to Host125.
Escape character is '^]'.


User Access Verification

Username: ashark
Password: 

host-125>

我比其他答案更喜欢使用此解决方案,因为睡眠解决方案有时会失败。

答案 4 :(得分:0)

尝试eval

eval "{ echo; 
        sleep 3;
        echo $user; 
        sleep 1; 
        echo $pass; 
        sleep 1; 
        echo '?'; 
        sleep 1; }" | telnet your_host

在这个例子中,我的远程命令是&#39;?&#39; (帮助)。

需要sleep s(可能不是全部,也不是这些时间;试错...),以避免telnet错过某些输入。

用户和密码作为变量传递($user$pass)。如果您正在编写脚本,请考虑存储密码的安全建议。

相关问题