【问题标题】:ssh command requires an interactive input [duplicate]ssh 命令需要交互式输入
【发布时间】:2018-01-11 12:47:53
【问题描述】:

我正在尝试通过 ssh 连接到远程机器并运行脚本。这个脚本有一个交互式确认:“你想运行它吗?{Y/N}”之类的东西。如何通过 ssh 命令直接对它说“Y”?

out=$(sshpass -p "abc" ssh -o StrictHostKeyChecking=no -l root x.x.x.x "./abc.py")

【问题讨论】:

  • 如果这是字面上唯一的字符串...out=$(sshpass -p "abc" ssh -o StrictHostKeyChecking=no -l root x.x.x.x './abc.py <<<Y')。顺便说一句,在可执行文件上添加扩展是不好的形式——你不运行ls.elf,出于同样的原因你不应该运行abc.py.py 扩展用于 Python 模块,而不是 Python 脚本。 (例如,如果您使用 distutils 让您的 setup.py 为您的入口点自动生成可执行包装器,您会注意到这些包装器没有任何扩展)。
  • 几乎所有规范的 Unix 工具都允许您使用标志或类似的东西覆盖这些确认。举个例子:您正在这里使用ssh 的主机密钥检查。在您尝试模拟人类输入响应之前,请与 ./abc.py 检查它是否提供此类功能。

标签: python linux bash ssh


【解决方案1】:

不确定这是否适用于 sshpass,但它肯定适用于裸 SSH,无论是基于密钥还是密码的身份验证。 如果您在 shell 中,您始终可以使用像 echo $INPUT | ./input-script.py|sh 这样的管道将输入作为标准输出提供给脚本,如下所示 -

$ ssh -i UAT.pem -o StrictHostKeyChecking=no -l ec2-user 13.222.237.508 "echo hello | ./1.py"
Please enter something: 

you entered hello

Python 脚本 -

#!/usr/bin/env python
var = raw_input("Please enter something: ")
print "\n"
print "you entered", var

希望这也适用于您!

【讨论】:

    【解决方案2】:

    我们应该能够使用“预期”脚本来解决您的问题。您可以点击以下链接以供参考 - https://www.thegeekstuff.com/2010/10/expect-examples/.

    【讨论】:

    • 是的,expect 可以使用,但是 StackOverflow 上的一个好的答案应该是独立的——真正解决 OP 的问题 拥有,即使其中包含的任何链接变坏。因此,如果它实际上显示了一个 expect 用于手头工作的示例,这将更加强大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2011-12-01
    • 2021-11-14
    • 1970-01-01
    • 2018-07-12
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多