python3 paramiko實現ssh客戶端

2021-09-25 11:04:58 字數 2277 閱讀 5246

ssh客戶端實現主要有以下四個問題:

第乙個問題是在python中ssh客戶端使用哪個包實現----我們這裡使用的是paramiko

第二個問題是怎麼連線伺服器----連線伺服器直接使用connect()函式就可以了,有個坑是不在known_hosts檔案中的機器預設不允許連線需要處理一下

第三個問題是連上之後怎麼執行命令----連上之後直接用exec_command()函式就可以執行命令

第四個問題是怎麼讀取命令執行結果----exec_command()函式會返回函式執行結果,用乙個引數接收一下就可以了

我們這裡整個整序的流程是:

使用使用者名稱密碼登入主機----如果登入成功則執行whoami命令----列印whoami命令結果----退出ssh會話

import logging

import sys

from paramiko import authenticationexception

from paramiko.client import sshclient, autoaddpolicy

from paramiko.ssh_exception import novalidconnectionserror

class mysshclient():

def __init__(self):

self.ssh_client = sshclient()

# 此函式用於輸入使用者名稱密碼登入主機

def ssh_login(self,host_ip,username,password):

try:

# 設定允許連線known_hosts檔案中的主機(預設連線不在known_hosts檔案中的主機會拒絕連線丟擲sshexception)

self.ssh_client.set_missing_host_key_policy(autoaddpolicy())

self.ssh_client.connect(host_ip,port=22,username=username,password=password)

except authenticationexception:

logging.warning('username or password error')

return 1001

except novalidconnectionserror:

logging.warning('connect time out')

return 1002

except:

logging.warning('unknow error')

print("unexpected error:", sys.exc_info()[0])

return 1003

return 1000

# 此函式用於執行command引數中的命令並列印命令執行結果

def execute_some_command(self,command):

stdin, stdout, stderr = self.ssh_client.exec_command(command)

print(stdout.read().decode())

# 此函式用於退出登入

def ssh_logout(self):

logging.warning('will exit host')

self.ssh_client.close()

if __name__ == '__main__':

# 遠端主機ip

host_ip = '192.168.220.129'

# 遠端主機使用者名稱

username = 'root'

# 遠端主機密碼

password = 'toor'

# 要執行的shell命令;換成自己想要執行的命令

# 自己使用ssh時,命令怎麼敲的command引數就怎麼寫

command = 'whoami'

# 例項化

my_ssh_client = mysshclient()

# 登入,如果返回結果為1000,那麼執行命令,然後退出

if my_ssh_client.ssh_login(host_ip,username,password) == 1000:

logging.warning(f"-login success, will execute command:")

my_ssh_client.execute_some_command(command)

my_ssh_client.ssh_logout()

參考:

python3 paramiko實現ssh客戶端

ssh客戶端實現主要有以下四個問題 第乙個問題是在python中ssh客戶端使用哪個包實現 我們這裡使用的是paramiko 第二個問題是怎麼連線伺服器 連線伺服器直接使用connect 函式就可以了,有個坑是不在known hosts檔案中的機器預設不允許連線需要處理一下 第三個問題是連上之後怎麼...

python3 paramiko實現ssh客戶端

pip install paramiko ssh客戶端實現主要有以下四個問題 第乙個問題是在python中ssh客戶端使用哪個包實現 我們這裡使用的是paramiko 第二個問題是怎麼連線伺服器 連線伺服器直接使用connect 函式就可以了,有個坑是不在known hosts檔案中的機器預設不允許...

python3 paramiko 巡檢網路裝置

用paramiko做網路裝置巡檢,發現大坑,就是show run這種看配置有多頁存在的沒法顯示第二頁,沒找到paramiko翻頁的地方,新增多個空格也不是很好使。避開這個坑,自動登入搞定了後面命令怎麼傳都是小事了,傳參參考第二個指令碼吧。cisco的全頁列印顯示配置資訊的命令 terminal le...