带有Fabric的远程交互式shell被CTRL-C杀死

时间:2012-03-11 03:56:15

标签: python fabric

我用一个简单的任务构建了一个Fabric fabfile,为我提供了一个远程交互式shell:

def shell():
  open_shell()

我这样做而不是原始的ssh来节省输入:fabfile已经有每个远程配置的密钥路径,主机名等。

调用

fab shell

有效,但如果我在shell中点击 CTRL + C ,则会终止整个连接。

是否可以将 CTRL + C 转到远程交互式shell?

1 个答案:

答案 0 :(得分:2)

我见过的用于python的ssh库中唯一一个使用ssh rfc描述的信号传递机制的是来自chilkatsoft的ssh库。 来自RFC 4254:

6.9.  Signals

A signal can be delivered to the remote process/service using the
following message.  Some systems may not implement signals, in which
case they SHOULD ignore this message.

  byte      SSH_MSG_CHANNEL_REQUEST
  uint32    recipient channel
  string    "signal"
  boolean   FALSE
  string    signal name (without the "SIG" prefix)

'signal name' values will be encoded as discussed in the passage
describing SSH_MSG_CHANNEL_REQUEST messages using "exit-signal" in
this section.

您可以修改fabric以使用它而不是'ssh'库,然后向fabric添加信号处理程序以捕获SIGINT并调用SendReqSignal()将其发送到远程进程。

或者您可以使用stty调用来包装fabric以将INTR字符更改为其他内容,然后再将其更改回来。

#!/bin/sh
stty intr ^U
<whatever to invoke fabric>
stty intr ^C