Удаленная интерактивная оболочка с Fabric завершается нажатием CTRL-C

Я создал fabfile Fabric с простой задачей, чтобы дать мне удаленную интерактивную оболочку:

def shell():
  open_shell()

Я делаю это вместо необработанного ssh, чтобы не печатать: в fabfile уже есть ключевые пути, имя хоста и т. д. для каждой удаленной конфигурации.

Вызов

fab shell

работает, но если я когда-нибудь нажму CTRL+C в оболочке, это убьет все соединение.

Можно ли заставить CTRL+C вместо этого перейти к удаленной интерактивной оболочке?


person Nils    schedule 11.03.2012    source источник
comment
ПРИМЕЧАНИЕ. Начиная с Fabric 1.6, это исправлено по умолчанию. Для управления им есть переменная среды — docs.fabfile.org/ ru/1.8/usage/env.html#remote-interrupt   -  person Nils    schedule 22.02.2014


Ответы (1)


Единственная из ssh-библиотек, которые я видел для python, которая использует механизм передачи сигналов, описанный в ssh rfc, — это библиотека от chilkatsoft. Из 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.

Вы можете изменить ткань, чтобы использовать ее вместо библиотеки «ssh», а затем добавить обработчик сигнала в ткань, чтобы поймать SIGINT и вызвать SendReqSignal(), чтобы отправить его удаленному процессу.

или вы, возможно, могли бы просто обернуть ткань вызовами stty, чтобы изменить символ INTR на что-то другое, а затем изменить его обратно.

#!/bin/sh
stty intr ^U
<whatever to invoke fabric>
stty intr ^C
person Samuel Devlin    schedule 11.03.2012
comment
Является ли RFC4254 тем, как обычный клиент ssh перенаправляет сигналы на удаленный конец? Интересно... - person Nils; 12.03.2012