【问题标题】:Error when opening interactive ssh shell from python从 python 打开交互式 ssh shell 时出错
【发布时间】:2012-11-23 01:50:29
【问题描述】:

我正在尝试通过 fabric 打开一个交互式 ssh shell。

要求:

  • 在远程连接字符串中使用结构主机
  • 在当前终端中打开完全交互式的 shell
  • 适用于 osx 和 ubuntu
  • Fabric/python 和远程之间不需要数据传输。所以织物任务可以在后台结束。

到目前为止:

fabfile.py:

def test_ssh():
    from subprocess import Popen
    Popen('ssh user@1.2.3.4 -i "bla.pem"', shell=True)

在终端:

localprompt$ fab test_ssh
localprompt$ tcsetattr: Input/output error

[remote ubuntu welcome here]

remoteprompt$ |

然后,如果我尝试在远程提示符上输入命令,它会在本地执行,然后我会退回到本地提示符。 有谁知道解决办法吗?

注意:我知道织物 open_shell,但这对我不起作用,因为标准输出滞后,导致它无法使用。

【问题讨论】:

  • 为什么要用fabric打开ssh shell?为什么不将命令作为结构任务运行?
  • 上面的代码根本没有使用fabric。 Popen 是一个本地命令。我认为在结构任务中执行它是没有意义的。
  • 嗯,通常我通过织物做一些事情,但有些事情只需要一个交互式外壳。我想用fabric 来做这件事,因为现在我有大约20 多个sh 脚本来连接我的各种服务器,而且保持连接字符串同步开始让我烦恼。 Fabric 将是执行此操作的合适工具,因为它已经拥有所有连接字符串。

标签: python ssh subprocess popen fabric


【解决方案1】:

稍作修改即可:

def test_ssh():
    from subprocess import call
    call('ssh user@1.2.3.4 -i "bla.pem"', shell=True)

正如question 的答案所暗示的错误表明错误来自 ssh 无法连接到后台进程的标准输入/输出。

使用call,fabric 任务不会在后台结束,但只要它不干扰我的标准输入/输出,我就可以接受。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-15
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多