簡體   English   中英

如何使用 paramiko 正確配置和關閉 SSH session

[英]How to correctly configure and close an SSH session with paramiko

我有一個 Onion Omega2 設備充當 linux 服務器,該服務器具有來自 Arduino 芯片的 UART stream。 通過我筆記本電腦上的終端,我可以通過 SSH 和 stream 連接來自 UART 的數據進入設備。 然后我嘗試使用 Paramiko 在 Python 中創建 SSH shell。 代碼如下圖:

import paramiko

def ssh_comm(ip, usr, passwd):
    client = paramiko.SSHClient();
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy());

    client.connect(ip, username=usr, password=passwd);
    channel = client.invoke_shell();

    channel.send("screen /dev/ttyS1 9600 \n");
    print("/n");
    points = 0;
    while points < 100:
        if channel.recv_ready():
            print(channel.recv(1024));
            points = points + 1;
    channel.shutdown(2);
    client.close();
    return;

ssh_comm("192.xxx.x.x", "root", "password");

第一次它連接良好,所有數據都流回我的筆記本電腦。 但是,當我讓 shell 關閉然后重新打開它時,我只會不時地從 Omega2 收到幾個數據包。 (雖然它仍然連接良好)通過 python 連接后,在終端上形成 SSH 連接時,傳輸也是間歇性的,使用: ssh root@192.xxx.xx

但是,重新啟動 Omega 2 可以解決此問題,因為我可以通過終端反復連接而沒有問題,我相信問題一定與在 python 代碼中關閉 session 有關。 或者沒有正確配置它。 瀏覽了 paramiko 文檔並盡力正確配置它,我仍然遇到同樣的問題。 關於可能導致它的任何想法?

我發現該錯誤與SSH配置無關,而是在關閉通道之前沒有關閉屏幕命令。 這是通過發送 CTRL-A 然后 k 然后 y 來完成的。 channel.send("\x01"); channel.send("k"); channel.send("y");

\x01 代表 CTRL-A。 如果不重新運行程序,則會創建第二個屏幕,並且它們都在爭奪 UART stream。 參考找到解決方案: Python Paramiko send CTRL+C to an ssh shell並提供了解決問題的第二種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM