我用一个简单的任务构建了一个Fabric fabfile,为我提供了一个远程交互式shell:
def shell():
open_shell()
我这样做而不是原始的ssh来节省输入:fabfile已经有每个远程配置的密钥路径,主机名等。
调用
fab shell
有效,但如果我在shell中点击 CTRL + C ,则会终止整个连接。
是否可以将 CTRL + C 转到远程交互式shell?
答案 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