1. 程式人生 > >python使用paramiko模組ssh連線遠端主機,環境變數問題

python使用paramiko模組ssh連線遠端主機,環境變數問題

有個需求需要在一臺機器上通過非手動登入的方式在另一臺機器上執行命令,於是我找到了Python的paramiko模組,SSHclient可以滿足要求執行命令。過了一陣子測試發現有的命令執行不了,錯誤提示是:command not found,但是在目標機器上可以執行,無語啊。。。驗證了一下測試的說法,懷疑是環境變數的問題,但是還是不懂該怎麼設定,上百度搜索一波,找了幾個相同問題的部落格,但是他們的解決方法試過了本地都不行,期間發現一個說明shell模式的部落格,講的很細緻,有一個關鍵點——通過SSH執行命令指令碼時在指令碼的第一行加上註釋#!/bin/bash --login 這樣就能解決環境變數的問題,我驗證了一下的確可行,但是我不想改當前的程式碼,把執行的命令全部封裝成檔案,心好累。繼續搜尋,後來在Google上搜索了一下paramilko command not found,終於在Stack Overflow上找到了答案 stdin, stdout, stderr = ssh.exec_command("bash -lc 'echo $PATH'")

,抱著試一下的態度驗證成功了,哈哈,皇天不負有心人呀,結合之前搜尋的部落格,我好想有點明白了,在機器上輸入命令man bash,看了一遍命令的引數說名,原來bash 的引數 -l 和 --login功能相同,即可以設定bash為前面博文提到的shell 的一種login模式,這樣環境變數就是正常的了。然後我把所有的命令都封裝了一下加上了 bash -lc 的外殼,在測試那邊通過了驗證,嘿嘿。