欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用Python連接?SSH?服務(wù)器并執(zhí)行命令

 更新時(shí)間:2023年11月02日 15:04:46   作者:lemeifei  
實(shí)際開(kāi)發(fā)中,有時(shí)候經(jīng)常需要查看日志,有時(shí)候使用ssh工具打開(kāi)就為了看一下錯(cuò)誤日志又比較麻煩,所以今天帶來(lái)一個(gè)簡(jiǎn)單的基于python的小工具,感興趣的朋友跟隨小編一起看看吧

實(shí)際開(kāi)發(fā)中,有時(shí)候經(jīng)常需要查看日志,有時(shí)候使用ssh工具打開(kāi)就為了看一下錯(cuò)誤日志又比較麻煩,所以今天帶來(lái)一個(gè)簡(jiǎn)單的基于python的小工具.

首先需要先安裝一個(gè)庫(kù) paramiko

使用命令直接安裝

pip install paramiko

paramiko庫(kù)是一個(gè)開(kāi)源的、基于SSH2協(xié)議的庫(kù),可以實(shí)現(xiàn)SSH連接以及數(shù)據(jù)的傳輸。

paramiko是用純Python實(shí)現(xiàn)的SSH2客戶端,支持身份驗(yàn)證、SFTP客戶端以及遠(yuǎn)程執(zhí)行命令等功能。paramiko庫(kù)提供了豐富的類(lèi)和方法,幫助用戶快速實(shí)現(xiàn)SSH通信功能。

在實(shí)際應(yīng)用中,paramiko庫(kù)常用于構(gòu)建自動(dòng)化運(yùn)維系統(tǒng)、遠(yuǎn)程部署、多機(jī)協(xié)作等場(chǎng)景.

定義MySshClient 類(lèi)

class MySshClient:
    def __init__(self, ssh_client):
        self.ssh_client = ssh_client
    def exec_command(self, cmd):
        try:
            stdin, stdout, stderr = self.ssh_client.exec_command(cmd)
            return stdin, stdout, stderr
        except Exception as e:
            print(f"Error executing command {cmd}: {e}")
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.ssh_client.close()
在此代碼中,我們定義了一個(gè) MySshClient 類(lèi),用于連接 SSH 服務(wù)器并執(zhí)行命令。您可以使用該類(lèi)創(chuàng)建一個(gè)實(shí)例,并通過(guò) connect() 方法連接到 SSH 服務(wù)器。
def connect(host, port, username, password):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.WarningPolicy())
    try:
        ssh.load_system_host_keys()
        ssh.connect(host, port, username, password,timeout=3)
    except paramiko.AuthenticationException:
        raise Exception(f"在主機(jī) {host}連接失敗,請(qǐng)檢查你的參數(shù)")
    except paramiko.SSHException as e:
        raise Exception(f"在 {host}連接出錯(cuò): {e}")
    except paramiko.BadHostKeyException as e:
        raise Exception(f" {host} 無(wú)法驗(yàn)證通過(guò): {e}")
    except Exception as e:
        raise Exception(f" 連接到{host}:{port}: {e}超時(shí)")
    return ssh

這個(gè)是給函數(shù)加上異常處理,方便代碼的調(diào)試

執(zhí)行命令

在連接到 SSH 服務(wù)器后,您可以使用 exec_command() 方法執(zhí)行命令。該方法返回一個(gè)元組,包含服務(wù)器的輸出、錯(cuò)誤和輸入。您可以將此元組提供給 with 關(guān)鍵字,以便在需要時(shí)進(jìn)行處理。

2.連接到主機(jī)

在連接到 SSH 服務(wù)器之前,您需要指定主機(jī)名、端口、用戶名和密碼。例如:

host = input("Host: 請(qǐng)輸入主機(jī)名")
port = int(input("Port: 默認(rèn)為22")or 22) 
username = input("Username: 請(qǐng)輸入用戶名")
password = getpass.getpass("Password: 請(qǐng)輸入密碼")

port = int(input(“Port: 默認(rèn)為22”)or 22) 這段代碼的意思是

默認(rèn)端口22,如果你的ssh端口不是22,可以自行修改

密碼的話,如果不想被別人看見(jiàn),使用getpass函數(shù)進(jìn)行加密

創(chuàng)建并連接到 MySshClient 實(shí)例

ssh = connect(host, port, username, password)

連接成功后,執(zhí)行命令并處理輸出

連接成功后,您可以使用 exec_command() 方法執(zhí)行命令,并使用 with 關(guān)鍵字處理服務(wù)器的輸出:

with MySshClient(ssh) as client:
    stdin, stdout, stderr = client.exec_command("ls -l")
    with stdout:
        print(stdout.read().decode())
    with stderr:
        print(stderr.read().decode())

這將在連接到 SSH 服務(wù)器后,執(zhí)行 “ls -l” 命令,并輸出結(jié)果。請(qǐng)注意,此示例僅顯示輸出,如果有錯(cuò)誤,錯(cuò)誤信息將顯示在控制臺(tái)。

完整代碼如下:

import paramiko
import os
import getpass
class MySshClient:
    def __init__(self, ssh_client):
        self.ssh_client = ssh_client
    def exec_command(self, cmd):
        try:
            stdin, stdout, stderr = self.ssh_client.exec_command(cmd)
            return stdin, stdout, stderr
        except Exception as e:
            print(f"Error executing command {cmd}: {e}")
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.ssh_client.close()
def connect(host, port, username, password):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.WarningPolicy())
    try:
        ssh.load_system_host_keys()
        ssh.connect(host, port, username, password,timeout=3)
    except paramiko.AuthenticationException:
        raise Exception(f"在主機(jī) {host}連接失敗,請(qǐng)檢查你的參數(shù)")
    except paramiko.SSHException as e:
        raise Exception(f"Error connecting to {host}: {e}")
    except paramiko.BadHostKeyException as e:
        raise Exception(f"Host key for {host} could not be verified: {e}")
    except Exception as e:
        raise Exception(f" 連接到{host}:{port}: {e}超時(shí)")
    return ssh
if __name__ == '__main__':  
    host = input("Host: 請(qǐng)輸入主機(jī)名")
    port = int(input("Port: 默認(rèn)為22")or 22)
    username = input("Username: 請(qǐng)輸入用戶名")  
    password = getpass.getpass("Password: 請(qǐng)輸入密碼")
    print('連接中...........')
    ssh = connect(host, port, username, password,)
    with MySshClient(ssh) as client:
        stdin, stdout, stderr = client.exec_command("ls -l")
        with stdout:
            print(stdout.read().decode())
        with stderr:
            print(stderr.read().decode())

當(dāng)然你也可以使用sftp進(jìn)行傳輸

# 上傳
current_path = os.getcwd()   #獲取當(dāng)前路徑
print(current_path)
filename = '\\main.py'     		# 文件名
file = current_path + f'{filename}'			# 當(dāng)前文件的路徑
sftp = client.open_sftp() 						# 使用sftp連接
sftp.put(file, '/root/main.py')			#  上傳文件
sftp.get('/root/server.sh', current_path+'/code.sh')     #下載文件

到此這篇關(guān)于使用 Python 連接 SSH 服務(wù)器并執(zhí)行命令的文章就介紹到這了,更多相關(guān)Python 連接 SSH 服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python文件操作中進(jìn)行字符串替換的方法(保存到新文件/當(dāng)前文件)

    Python文件操作中進(jìn)行字符串替換的方法(保存到新文件/當(dāng)前文件)

    這篇文章主要介紹了Python文件操作中進(jìn)行字符串替換的方法(保存到新文件/當(dāng)前文件) ,本文給大家介紹兩種方法,每種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • 在Python中預(yù)先初始化列表內(nèi)容和長(zhǎng)度的實(shí)現(xiàn)

    在Python中預(yù)先初始化列表內(nèi)容和長(zhǎng)度的實(shí)現(xiàn)

    今天小編就為大家分享一篇在Python中預(yù)先初始化列表內(nèi)容和長(zhǎng)度的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python下載手機(jī)小視頻的操作方法

    Python下載手機(jī)小視頻的操作方法

    這篇文章主要介紹了Python 下載手機(jī)小視頻,主要為大家介紹使用 mitmproxy 這個(gè)抓包工具如何監(jiān)控手機(jī)上網(wǎng),并且通過(guò)抓包,把我們想要的數(shù)據(jù)下載下來(lái),需要的朋友可以參考下
    2022-04-04
  • Python 3實(shí)戰(zhàn)爬蟲(chóng)之爬取京東圖書(shū)的圖片詳解

    Python 3實(shí)戰(zhàn)爬蟲(chóng)之爬取京東圖書(shū)的圖片詳解

    最近在學(xué)習(xí)python3,下面這篇文章主要給大家介紹了關(guān)于Python3實(shí)戰(zhàn)爬蟲(chóng)之爬取京東圖書(shū)圖片的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-10-10
  • python的移位操作實(shí)現(xiàn)詳解

    python的移位操作實(shí)現(xiàn)詳解

    這篇文章主要介紹了ppython的移位操作實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 解讀調(diào)用jupyter?notebook文件內(nèi)的函數(shù)一種簡(jiǎn)單方法

    解讀調(diào)用jupyter?notebook文件內(nèi)的函數(shù)一種簡(jiǎn)單方法

    這篇文章主要介紹了解讀調(diào)用jupyter?notebook文件內(nèi)的函數(shù)一種簡(jiǎn)單方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python實(shí)現(xiàn)ElGamal加密算法的示例代碼

    Python實(shí)現(xiàn)ElGamal加密算法的示例代碼

    ElGamal加密算法是一個(gè)基于迪菲-赫爾曼密鑰交換的非對(duì)稱加密算法。這篇文章通過(guò)示例代碼給大家介紹Python實(shí)現(xiàn)ElGamal加密算法的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2020-06-06
  • Python自動(dòng)發(fā)送和收取郵件的方法

    Python自動(dòng)發(fā)送和收取郵件的方法

    這篇文章主要介紹了Python自動(dòng)發(fā)送和收取郵件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 分享5個(gè)python提速技巧,速度瞬間提上來(lái)了

    分享5個(gè)python提速技巧,速度瞬間提上來(lái)了

    這篇文章主要給大家分享的是5個(gè)python提速技巧,工作或者學(xué)習(xí)的過(guò)程中難免會(huì)遇到卡頓問(wèn)題,下面的提速技巧具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-01-01
  • 詳解python中的變量

    詳解python中的變量

    這篇文章主要為大家詳細(xì)介紹了python的變量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論