我正在尝试在一个不会给我正常shell的盒子上运行几个远程命令(它是一个具有专有shell的设备)。
我还从资源有限的设备运行命令,所以我无法添加像 Expect 这样的功能。
我尝试了以下方法,但无济于事:
#!/bin/ksh
( sleep 2
echo username
sleep 5
echo password
sleep 5
echo show whoison ) | telnet 192.168.1.10
它成功输入用户名但输入密码失败。“\n”似乎也不起作用。
我之前尝试过 SSH,但设备使用的 shell 不允许我传递命令(我尝试过 ssh user@host 'show whoison')
答案1
首先,不要这样做,这样不安全。
第二-只有当你必须这样做时......
下面的行 - 与您的类似 - 对我有用 - 但这可能是一种竞争条件,并且取决于您的设备需要凭证的速度。
( echo someLogin; echo somePass; echo reboot 0; echo reboot 0 ; sleep 3; ) | telnet 192.168.0.141
你也可以使用预计
答案2
对于使用 telnet 自动登录,您确实需要使用预计
笔记:说实话,你也不想使用 telnet。现在几乎每个平台都有可用的 SSH 替代方案,包括 Cisco 路由器。
SSH 允许您
- 通过公钥认证进行无密码输入
- 更容易执行远程命令
- 通过脚本传递返回值
- 端到端加密的安全环境
- 代理身份验证,以便可以在密钥上使用密码,但密钥在使用一次后会存储在内存中。
如果您有能力使用 SSH,请使用它。如果没有,请使用 expect。
答案3
我点击了你的问题来推荐预计,但后来看到了你的限制。抱歉,但 telnet 无法按你想要的方式使用。你试过了吗网猫或者你无法安装任何事物?
此外,telnet 仅对受信任的本地流量才是安全的;否则请使用 SSH。
答案4
使用 ssh 的 -t 选项是否有助于解决使用 ssh 时命令不起作用的问题?