ssh kitten: Delegate to ssh when -T is used

Fixes #5411
This commit is contained in:
Kovid Goyal 2022-08-24 15:14:43 +05:30
parent d595084395
commit e330c38d4a
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -414,9 +414,11 @@ class InvalidSSHArgs(ValueError):
os.execlp(ssh_exe(), 'ssh') os.execlp(ssh_exe(), 'ssh')
passthrough_args = {f'-{x}' for x in 'NnfGT'}
def parse_ssh_args(args: List[str], extra_args: Tuple[str, ...] = ()) -> Tuple[List[str], List[str], bool, Tuple[str, ...]]: def parse_ssh_args(args: List[str], extra_args: Tuple[str, ...] = ()) -> Tuple[List[str], List[str], bool, Tuple[str, ...]]:
boolean_ssh_args, other_ssh_args = get_ssh_cli() boolean_ssh_args, other_ssh_args = get_ssh_cli()
passthrough_args = {f'-{x}' for x in 'NnfG'}
ssh_args = [] ssh_args = []
server_args: List[str] = [] server_args: List[str] = []
expecting_option_val = False expecting_option_val = False
@ -733,10 +735,13 @@ def main(args: List[str]) -> None:
ssh_args, server_args, passthrough, found_extra_args = parse_ssh_args(args, extra_args=('--kitten',)) ssh_args, server_args, passthrough, found_extra_args = parse_ssh_args(args, extra_args=('--kitten',))
except InvalidSSHArgs as e: except InvalidSSHArgs as e:
e.system_exit() e.system_exit()
if passthrough:
if found_extra_args:
raise SystemExit(f'The SSH kitten cannot work with the options: {", ".join(passthrough_args)}')
os.execlp(ssh_exe(), 'ssh', *args)
if not os.environ.get('KITTY_WINDOW_ID') or not os.environ.get('KITTY_PID'): if not os.environ.get('KITTY_WINDOW_ID') or not os.environ.get('KITTY_PID'):
raise SystemExit('The SSH kitten is meant to run inside a kitty window') raise SystemExit('The SSH kitten is meant to run inside a kitty window')
if passthrough:
raise SystemExit('The SSH kitten is meant for interactive use via SSH only')
if not sys.stdin.isatty(): if not sys.stdin.isatty():
raise SystemExit('The SSH kitten is meant for interactive use only, STDIN must be a terminal') raise SystemExit('The SSH kitten is meant for interactive use only, STDIN must be a terminal')
try: try: