看似简单的问题,却产生了不太理想的结果。
执行 putty 来启动远程 Linux 服务器上需要用户输入的脚本
远程脚本确实read -p "Please enter name" NAME
可以用于plink
通过 SSH 执行脚本,以下尝试和问题如下所示:-
注意,这-load ns
是要加载不存在的会话,即确保不使用默认值
1)plink.exe -load ns <ip_addr> -l <user> -pw <password> <script path/name>
问题)不允许/显示用户输入,即非交互式的。
2)添加-t
分配一个 pty :-
plink.exe -t -load nc <ip_addr> -l <user> -pw <password> <script path/name>
问题)好的,现在可以看到用户输入,但是当按下退格键时,我得到了 Ctrl+H (^H),如果用户没有犯错那就好了!
3)使用已保存会话的 putty
putty.exe -load "SavedSession"
问题) (A)打开一个新窗口,虽然不是什么大问题,但也不那么好看。(二)保存的会话不能轻易已移动。(C)获取密码提示,无法像 plink 那样提供密码,我知道我知道,使用密钥,但这是一个封闭的私人网络,不使用密钥更容易!
因此理想情况下,我希望 SSH 以在线方式执行,即在我所在的批处理文件/命令行 shell 中执行,不提示输入用户名/密码,运行 linux 脚本并允许提示和删除/退格键工作。
非常感谢您提前提供的任何想法/解决方案。
答案1
添加 -t 来分配一个 pty ... 好的,现在可以看到用户输入,但是当按下退格键时,我得到了 Ctrl+H (^H)
让你的脚本运行[ -t 0 ] && stty erase ^H
并且 Backspace 键应该被接受。
更好的解决方案是使用 OpenSSH 的端口 - 例如 Cygwin 或 MinGW 的端口 - 它将像 PuTTY 一样为您提供完整的终端仿真,但将其保留在控制台窗口中。(叮当该工具专为原始 8 位数据传输而设计。
编辑:Cygwin 的一个缺点可能是它缺乏 IPv6 支持(如果我没记错的话)。
获取密码提示,无法像 plink 那样提供密码
[...] 但这是一个封闭的私人网络,更容易不用密钥!
然而你有一个问题,设置密钥可以解决:)
(虽然这么说会让我感到难过,但是 PuTTY 也接受-pw
。)