【发布时间】:2014-07-01 19:10:21
【问题描述】:
我正在用 Delphi(适用于 Windows)编写一个控制台应用程序,它在后台使用 plink.exe 通过 ssh 连接到设备(重定向标准输入和标准输出)。
我的包装器正在使用 plinkremote 组件 (http://www.delphipraxis.net/70989-komponente-fuer-ssh-verbindung-6.html)。
为了启动连接,我让包装器向用户询问用户名和密码,然后运行命令 [plink -pw "password" user@server],它会连接并且我通过包装器连接到服务器。
一切都按预期工作,但有一个例外:如果我输入的密码不正确,最新版本的 plink(0.63 版)会出现“交互式键盘身份验证”并要求输入密码。那时我的包装器停止工作。我输入的任何内容都不会被转发到服务器,唯一的退出方法是一起关闭命令提示符窗口。 我找到了一种禁用这种“交互式身份验证”的方法(通过保存禁用它的 putty 会话并将该会话加载到我的包装器中),但是 plink 仍然会要求输入密码,并且我的包装器停止以相同的方式工作。
在过去的几天里,我试图弄清楚它为什么停止工作。我不确定输入或输出是否被重定向到其他地方(仅当 plink 要求输入密码时)。 如果 plink 无法进行身份验证,我希望 plink 仅关闭连接,然后我可以立即尝试再次连接,希望正确输入密码并连接。以前的 plink 版本(0.60 版)正是这样做的。当然我更喜欢使用最新的 plink 版本,所以我想弄清楚当 plink 无法连接到给定的凭据时发生了什么。
我进行了搜索,但找不到此问题的解决方案 - 唯一听起来是类似问题的问题没有得到解答 (https://stackoverflow.com/questions/19458241/redirecting-the-dev-tty-for-a-plink-command)。
有谁知道可能出了什么问题或如何完全禁用 plink 中的密码问题?
谢谢!
【问题讨论】:
-
好吧,经过一周的尝试找出 plink 的输入和输出发生了什么,我放弃并认出了 plink 的“用户@服务器密码”问题。如果我看到这个问题,我只需退出我的程序(包装器)以返回命令提示符。根本不是我想做的,但至少我可以像这样使用我的程序,直到我弄清楚 plink 在做什么。
-
好吧,现在我觉得有点傻。我一定忽略了 plink 的“-batch”选项。有了它,plink 将“禁用所有交互式提示”并且不会要求输入密码,如果它是错误的。我仍然想弄清楚 plink 在做什么,但至少它不会“崩溃”我的包装器。
标签: redirect ssh stdout stdin plink