記一次paramiko遠端連線遇到的坑

菜鳥測試開發發表於2019-08-06

背景:工作中遇到了一個問題,需要用到windows向windows連線(檔案傳發)以及,linux向windows連線(檔案傳發)的需求。

自然而然會考慮到用paramiko,然而paramiko我用的比較多的還是連線linux的操作,至於連線windows的操作沒用過。在網上搜尋一段時間後,發現網上的教程基本上沒有。折騰一段時間後發現了winrm,winrm在命令傳送比較簡單,但是檔案上傳、下載,還是沒有合適的路子(或者說適合自己的方法)。一番折騰後還是想自己研究一把paramiko。


問題1:在網上搜尋方法的時候,發現別人可以直接用paramiko連線windows,並用psutil 獲取cpu、記憶體等資料,程式碼和我們連線linux基本一樣的,那麼我也來試一下:

import paramiko
client=paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='***',port=22,username='Administrator',password='***')
client.close()

 

思考1:也可能是因為windows不支援ssh連線,那麼我就試一下transaport:

scp=paramiko.Transport((IP,22))
scp.connect(username=username,password=password)
sftp=paramiko.SFTPClient.from_transport(scp)
scp.close()

依然遇到了同樣的問題

思考2:既然別人可以,程式碼應該就沒有問題,那麼會是什麼問題。網上搜尋一番,發現可能和openssh有關係,接著下載openssh

問題2:按照下面的教程在目標window10 的機器上面安裝了openssh之後,再次嘗試了一把,但是還是遇到了“[WinError 10061] 由於目標計算機積極拒絕,無法連線。”
https://www.jianshu.com/p/6e5bc39d386e

思考3:會不會因為是22 埠沒有開啟導致的,於是乎檢視埠情況發現埠是開的

思考4:會不會是因為防火牆的原因,關閉防火牆之後發現還是同樣的問題,此時的心態已經接近崩潰

問題3:即使我們目標端的windows的機器安裝了openssh但是我們還是不能連線上去:

思考5:繼續嘗試後發現我的目標windows的機器可以通過ssh連線到其他的機器上面,但是我卻不能ssh到目標機器上面,這時候似乎明白了什麼。檢視服務發現ssh啟動的只有sshd服務,此時我們把ssh的服務端和客戶端都開啟應該問題就解決了

ps:其實正在發現問題所在是我在用exe版安裝openssh的時候發現了下面的選項,exe版安裝是預設按照客戶端和伺服器端的,而我們原始碼安裝應該只有客戶端。

 

相關文章