就我而言,在两级 ssh 调用的外部 ssh 上强制分配 pty 解决了这个问题。
细节:
当您为 ssh 提供运行命令(例如 ssh some_server "do_some_command" )时,ssh 假定您不需要交互式会话,并且在提交您要求的“do_some_command”作业时它不会分配 pty。
但是,如果您有两层 ssh,事情就会变得有趣(例如,假设您想先 ssh 进入“网关”机器,然后从那里 ssh 进入“内部”机器并运行一些“inner_command”)。
问题是,对于两层 ssh 作业,从外部 ssh 的角度来看,您要求外部 ssh 运行非交互式命令,因此外部 ssh 不会分配 tty。
如果您在内部 ssh 中运行的命令是交互式的,它可能会想要查询 tty 属性,并且它会(正确地)抱怨它没有在 tty 上运行。
在我的情况下,解决方案是使用 -t 参数强制外部 ssh 分配一个 pty。所以它看起来像这样:
ssh -t <gateway_machine> "ssh <inner_machine> \"<inner_interactive_command>\" "
问候系统管理员