exec_command使用的是ssh exec channel的方式執行,不具備持久化的能力,也就是每次執行都是一次全新的環境,不是說你先切換到root,下一條命令執行就是以root執行了,說簡單點就是把命令當作引數傳送出去,如:
ssh user@host 命令
適合場景:不想使用終端**;不執行諸如分頁,著色和主要是互動式確認之類的操作,有乙個典型的坑,不能使用nohup
實現方式:
import paramiko
ssh = paramiko.sshclient(
)ssh.set_missing_host_key_policy(paramiko.autoaddpolicy)
ssh.connect(ip, port, username, password, timeout=10)
ssh.exec_command(
"python3 /root/test.py"
)# 執行命令的地方
# stdin, stdout, stderr = ssh.exec_command("python3 /root/test.py")
# stdin.readlines() # 獲取輸入資訊,type:list
# stdout.readlines() # 獲取輸出資訊,type:list
# stderr.readlines() # 獲取錯誤資訊,type:list
ssh.close(
)
invoke_shell使用的是ssh shell channel的方式執行,具備持久化能力,就類似和我們平時用mobaxterm,xshell等這些終端軟體連線上去一樣
適合場景:需要一些持久化的操作;需要使用一些互動式命令
實現方式:
import time, paramiko
ssh = paramiko.sshclient(
)ssh.set_missing_host_key_policy(paramiko.autoaddpolicy)
ssh.connect(ip, port, username, password, timeout=10)
invoke = ssh.invoke_shell(
)invoke.send(
"python3 /root/test.py \n"
)# \n很重要,相當於回車
time.sleep(2)
# 等待命令執行完畢
# invoke.recv(9999).decode("utf-8") # 提取資料然後解碼
ssh.close(
)
python3 paramiko實現ssh客戶端
ssh客戶端實現主要有以下四個問題 第乙個問題是在python中ssh客戶端使用哪個包實現 我們這裡使用的是paramiko 第二個問題是怎麼連線伺服器 連線伺服器直接使用connect 函式就可以了,有個坑是不在known hosts檔案中的機器預設不允許連線需要處理一下 第三個問題是連上之後怎麼...
python3 paramiko實現ssh客戶端
ssh客戶端實現主要有以下四個問題 第乙個問題是在python中ssh客戶端使用哪個包實現 我們這裡使用的是paramiko 第二個問題是怎麼連線伺服器 連線伺服器直接使用connect 函式就可以了,有個坑是不在known hosts檔案中的機器預設不允許連線需要處理一下 第三個問題是連上之後怎麼...
python3 paramiko實現ssh客戶端
pip install paramiko ssh客戶端實現主要有以下四個問題 第乙個問題是在python中ssh客戶端使用哪個包實現 我們這裡使用的是paramiko 第二個問題是怎麼連線伺服器 連線伺服器直接使用connect 函式就可以了,有個坑是不在known hosts檔案中的機器預設不允許...