[英]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.