Могу ли я вызвать Channel.invoke_shell () без вызова Channel.get_pty (), если НЕ использовать Channel.exec_command () - PullRequest
0 голосов
/ 23 сентября 2019

Я много раз читал документы по paramiko.Тем не менее, я не могу найти ответ на вопрос, который у меня был:

  1. Почему я не могу позвонить channel.invoke_shell(), не позвонив channel.get_pty() до того, как уйти?- Вот мое понимание из документов - нет необходимости звонить channel.get_pty(), если я хочу использовать channel.exec_command().Но что, если я хотел бы использовать интерактивную оболочку с channel.send() или channel.recv().Это обязательно?

Вот моя попытка:

client = paramiko.SSHClient()

# Set SSH key parameters to auto accept unknown hosts
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# Connect to the host
client.connect(hostname=hostname, username=username, password=password)
channel = client.get_transport().open_session()
channel.invoke_shell() # ---> Channel closed Exception here
channel.send(cmd + "\r")

С этим я получаю paramiko.ssh_exception.SSHException: Channel closed.Если я позвоню channel.get_pty() до invoke_shell(), это сработает.Я просто хотел бы использовать интерактивную оболочку, но не семантику терминала.Возможно ли это?

Плинк лог:

plink.exe -T -v user@host -pw password interactive-tool.exe
Looking up host "host" for SSH connection
Connecting to host port 22
We claim version: SSH-2.0-PuTTY_Release_0.72
Remote version: SSH-2.0-OpenSSH_for_Windows_7.7
Using SSH protocol version 2
No GSSAPI security context available
Doing ECDH key exchange with curve Curve25519 and hash SHA-256 (unaccelerated)
Server also has ecdsa-sha2-nistp256/ssh-rsa host keys, but we don't know any of them
Host key fingerprint is:
ssh-ed25519 255 xx:xx:xx:xx
Initialised AES-256 SDCTR (AES-NI accelerated) outbound encryption
Initialised HMAC-SHA-256 (unaccelerated) outbound MAC algorithm
Initialised AES-256 SDCTR (AES-NI accelerated) inbound encryption
Initialised HMAC-SHA-256 (unaccelerated) inbound MAC algorithm
UAttempting keyboard-interactive authentication
sing username "user".
Server refused keyboard-interactive authentication
Sent password
Access granted
Access granted. Press Return to begin session.
Opening main session channel
Opened main channel
Started a shell/command

1 Ответ

0 голосов
/ 25 сентября 2019

Вы можете позвонить Channel.invoke_shell() без звонка Channel.get_pty().

Если он не работает, это ограничение вашего сервера, а не JSch.
И вы уже знаете из своегопредыдущий вопрос что это так.

С моим Win32-OpenSSH 7.7 на Windows 10 Pro 1903 я могу без проблем использовать сессию оболочки без TTY:

C:\>echo ipconfig | plink -T username@localhost -pw password
Using username "username".
Microsoft Windows [Version 10.0.18362.356]
(c) 2019 Microsoft Corporation. All rights reserved.

username@COMPUTERNAME C:\Users\username>ipconfig 

Windows IP Configuration


Ethernet adapter Ethernet 2:

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...