即使在非交互模式下,Windows ssh 服务器也会偶尔挂起等待键盘输入?

即使在非交互模式下,Windows ssh 服务器也会偶尔挂起等待键盘输入?

我在尝试 SSH 连接到 Windows 服务器时遇到偶尔的问题(运行自由软件或者Win32的OpenSSH,结果相同)。当尝试运行非交互式命令(从带有 OpenSSH 客户端的 Debian Jessie)时,有时(但并非总是如此,并且间隔不同)远程命令会停止并需要按 才能ENTER继续。

例如:

ssh -4 -T somehost "mysqldump --master-data --all-databases" > backup.sql &

在某些 Windows 机器上,它可以正常完成(如果数据库足够小),但在较大的机器上,它通常会停止(立即停止,backup.sql剩余大小为 0,或者在一段时间后,剩余backup.sql大小从几兆字节到几百兆字节),然后 shell 会通知我 ssh 客户端进程正在等待输入:

[1]+  Stopped                 ssh -4 -T somehost "cat mysqldump --master-data --all-databases" > backup.sql

如果我将其带到fg并按下ENTER,它将继续工作,即使我CTRL+Zbg它之后也是如此。有时它会在那时完成,有时它会在一段时间后再次停止。

strace 确认该进程正在等待 TTY 输入(在文件描述符 4 上,即打开的 RW/dev/pts/2或生成 ssh 客户端的 shell 的类似 PTY),并且这就是进程停止的原因。

如果我从没有关联 TTY 的脚本运行 ssh,它就会死机(因为没有人按ENTER)。如果我提供-n从 重定向 stdin 的选项/dev/null,ssh 会在连接后立即死机。这会带来额外的问题,因为不是从终端运行的 ssh 连接(例如从 cron(8)/atd(8) 运行)将立即失败。

我发现的唯一接近的问题是这个但是提供的解决方法(强制使用 PTY)并不适用于我的情况(当检测到 PTY 时,相关程序会修改其行为,添加 ANSI 排序和自动换行等)。

不用说,连接到运行 OpenSSHD 服务器的数百个 Debian(和其他 GNU/Linux)系统的相同命令不会遇到任何问题(无论是否使用-n)。只有当 sshd 服务器在 Microsoft Windows 上运行时才会出现问题。

有人知道如何修复或解决这个问题吗?我尝试过以下简单的方法:

yes '' | ssh -4 -T somehost "mysqldump --master-data --all-databases" > backup.sql &

但它效果不佳(虽然它修复了 ssh 等待键盘的问题,但它也会随机地在输出中插入换行符,这是不可接受的)。相关内容Windows 上的 OpenSSH 服务器即使在非交互模式下,如果没有 STDIN 也无法工作

相关内容