Telnet 使用用户名和密码登录到邮件服务器
Posted
技术标签:
【中文标题】Telnet 使用用户名和密码登录到邮件服务器【英文标题】:Telnet to login with username and password to mail Server 【发布时间】:2015-03-12 12:34:51 【问题描述】:我在尝试通过 telnet 连接到邮件服务器时遇到了一些问题。我遇到的主要问题是我需要创建一个脚本来记录我到目的地,但我找不到回显的方法密码。
我尝试了什么:
telnet host -l username ; echo 'password'
它仍然要求我输入密码。有什么办法可以解决这个问题还是我做错了什么?
【问题讨论】:
【参考方案1】:您是否尝试过使用 expect 命令?您将必须创建一个脚本,您可以在其中识别来自服务器的“预期”响应,例如“密码:”,然后在脚本中提供密码。下面将解释:https://en.wikipedia.org/wiki/Expect - 这里也展示了一个很好的例子:http://en.kioskea.net/faq/4736-shell-script-for-telnet-and-run-commands
【讨论】:
【参考方案2】:AFAIK,您将无法以这种方式自动化 telnet。但它仍然是可能的 - 即使这是一个非常糟糕的想法(我稍后会详细说明)。
首先为什么你的尝试失败了:
您启动了一个 telnet 命令,从 stdin(我想是终端)读取并写入 stdout 和 stderr(我想也是一个终端) 如果您的 telnet 相当新,它会尝试保护您的身份验证并从 /dev/tty 询问您的密码(出于安全原因) 当该命令结束时你在自己的终端上写password
你应该怎么做:
启动 telnet 并禁用自动身份验证(我的是telnet -X SRA
)
用您要传递的命令为其输入提供输入
在输入输入之前等待一些延迟,至少对于登录名和密码,因为如果您在读取之前不 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
which:
如果你不能使用ssh
(一些系统管理员不喜欢不受控制的输入ssh连接)你也可以尝试使用rsh
。它较旧,安全性低得多,但至少是为批量使用而设计的。
【讨论】:
嘿,谢谢。我有点避免这种解决方式,但现在我很难从 imap.look 中获得结果:***.com/questions/27944984/…【参考方案3】:试试eval
:
eval " echo;
sleep 3;
echo $user;
sleep 1;
echo $pass;
sleep 1;
echo '?';
sleep 1; " | telnet your_host
在本例中,我的远程命令是“?” (帮助)。
需要sleep
s(可能不是全部,也不是这些时间;试错...)以避免 telnet 遗漏一些输入。
用户和密码作为变量传递($user
和 $pass
)。如果您正在编写脚本,请考虑存储密码的安全建议。
【讨论】:
【参考方案4】:首先可以使用eval
:
eval " echo user_name; sleep 1; echo pass; sleep 1; echo '?'; sleep 5; " | telnet host_address
确保替换user_name
、pass
、?
(这是您要运行的命令)和host_address
,您的telnet 主机正在侦听;对我来说,这是一个本地 IP。
编写一组命令并将它们通过管道传输到 telnet 应用程序非常容易。您需要做的就是这样:
(echo commandname;echo anothercommand) | telnet host_address
唯一的问题是您必须通过烦人的登录……它不会立即显示出来。因此,如果您输入“echo admin”,然后输入“echo password”,它会发生得太快并且不会发送到服务器。解决方案?使用 sleep 命令!
添加几个 sleep 3 命令,等待三秒钟,解决了这个问题。首先我们将回显用户名和密码,然后我们将回显重启命令,每次我们将等待三秒钟。最后的命令会立即重启服务器:
(sleep 3;echo admin;sleep 3;echo mypassword;sleep 3;echo system reboot;sleep 3;) | telnet host_address
您可以将其放入 shell 脚本中,并在需要时运行它。或者您可以像这样(在 OS X 或 Linux 上)将它添加到您的 cron:
crontab -e
在某处添加这一行:
1 7 * * * (sleep 3;echo admin;sleep 3;echo mypassword;sleep 3;echo system reboot;sleep 3;) | telnet host_address
这将在每天早上 7:01 重新启动您的路由器。
【讨论】:
【参考方案5】:感谢Harvix 的回答,我知道还有期待shell 的替代本机,称为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>
我更喜欢这个解决方案,而不是使用另一个答案中建议的睡眠命令,因为睡眠解决方案有时会失败。
【讨论】:
以上是关于Telnet 使用用户名和密码登录到邮件服务器的主要内容,如果未能解决你的问题,请参考以下文章
使用 SwiftUI、Combine 和 Firebase,我如何在将用户的帐户链接到电子邮件/密码之前验证用户是不是已匿名登录?
Firebase忘记密码 - 如何识别用户是否使用电子邮件或Facebook登录?