首頁 > 後端開發 > Python教學 > Python伺服器程式設計:使用Paramiko實作SSH遠端操作

Python伺服器程式設計:使用Paramiko實作SSH遠端操作

WBOY
發布: 2023-06-18 13:10:53
原創
2876 人瀏覽過

隨著雲端運算和物聯網的發展,遠端操作伺服器變得越來越重要。在Python中,我們可以使用Paramiko模組來輕鬆實現SSH遠端操作。在本文中,我們將介紹Paramiko的基本用法,以及如何在Python中使用Paramiko來遠端管理伺服器。

什麼是Paramiko

Paramiko是一個用於SSHv1和SSHv2的Python模組,可以用來連接和控制SSH客戶端和SSH伺服器。使用Paramiko模組,可以輕鬆地編寫Python腳本來遠端登入並操作伺服器。

Paramiko基本用法

Paramiko模組的基本用法非常簡單,我們可以使用Paramiko的SSHClient類別來建立SSH客戶端對象,並連接到SSH伺服器。下面是一個基本的範例:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='username', password='password')
登入後複製

在這個範例中,我們先建立了一個SSHClient對象,並使用set_missing_host_key_policy方法來允許自動新增缺少的SSH金鑰。然後,我們使用connect方法連接到SSH伺服器,傳入主機名稱、使用者名稱和密碼作為參數。

現在,我們已經成功地連接到SSH伺服器。接下來,我們可以使用SSHClient物件來執行遠端命令,例如取得伺服器的作業系統資訊:

stdin, stdout, stderr = ssh.exec_command('uname -a')
print(stdout.read())
登入後複製

這個範例中,我們使用exec_command方法來執行uname -a命令並且取得輸出。我們也使用了stdout.read()來讀取輸出並列印出來。

除了執行遠端命令外,我們還可以使用SSHClient物件來上傳和下載檔案。下面是一個上傳檔案的範例:

sftp = ssh.open_sftp()
local_file = '/path/to/local/file.txt'
remote_file = '/path/to/remote/file.txt'
sftp.put(local_file, remote_file)
sftp.close()
登入後複製

這個範例中,我們先使用open_sftp方法開啟SFTP會話,並使用put方法來上傳本機檔案到遠端伺服器。我們也使用了sftp.close()方法來關閉SFTP會話。

使用Paramiko實作SSH遠端操作

現在,我們已經了解了Paramiko的基本用法,接下來,我們將使用Paramiko來遠端操作伺服器。我們將實作以下功能:

  • 連接到SSH伺服器並執行一些基本命令
  • 建立和刪除資料夾
  • #上傳和下載檔案

首先,我們需要安裝Paramiko模組:

pip install paramiko
登入後複製

接下來,我們來寫Python腳本。首先,我們先導入必要的模組:

import os
import paramiko
登入後複製

然後,我們定義一些常數,包括SSH伺服器的主機名稱、使用者名稱和密碼:

HOST = 'hostname'
USER = 'username'
PASSWORD = 'password'
登入後複製

接下來,我們可以使用paramiko.SSHClient類別來連接到SSH伺服器:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST, username=USER, password=PASSWORD)
登入後複製

在這個範例中,我們使用了set_missing_host_key_policy()方法來自動新增缺少的SSH金鑰。

接下來,我們將定義一些函數來執行不同的任務。首先是執行指令的函數:

def run_command(command):
    stdin, stdout, stderr = ssh.exec_command(command)
    output = stdout.read().decode('utf-8')
    return output
登入後複製

這個函數接收一個指令參數,使用SSHClient物件的exec_command方法來執行此指令,並將輸出作為字串傳回。

接下來,我們定義一個功能來建立目錄:

def create_directory(path):
    sftp = ssh.open_sftp()
    try:
        sftp.mkdir(path)
    except IOError:
        pass
    sftp.close()
登入後複製

這個函數接收一個路徑參數,並使用SFTP會話建立一個目錄。

我們也定義了功能來上傳和下載檔案:

def upload_file(local_path, remote_path):
    sftp = ssh.open_sftp()
    sftp.put(local_path, remote_path)
    sftp.close()


def download_file(remote_path, local_path):
    sftp = ssh.open_sftp()
    sftp.get(remote_path, local_path)
    sftp.close()
登入後複製

這些函數分別接收一個本機路徑和遠端路徑(用於上傳)或一個遠端路徑和本機路徑(用於下載),並使用SFTP會話來上傳或下載對應的檔案。

最後,我們將定義一個main函數來執行所有任務:

def main():
    # Run a command
    output = run_command('ls -la')
    print(output)

    # Create a directory
    create_directory('/home/username/new_folder')

    # Upload a file
    upload_file('/path/to/local/file.txt', '/home/username/new_folder/file.txt')

    # Download a file
    download_file('/home/username/new_folder/file.txt', '/path/to/local/file.txt')

    # Close the SSH connection
    ssh.close()
登入後複製

這個main函數執行了以下任務:

  • 執行ls -la指令並列印輸出
  • 建立了一個新目錄
  • 上傳了一個檔案
  • 下載了同一個檔案
  • 關閉了SSH連線

現在,我們可以運行這個腳本並查看輸出:

python ssh.py
登入後複製

結果應該是類似以下的輸出:

total 20
drwxr-xr-x 1 username username 4096 Aug 15 02:24 .
drwxr-xr-x 1 username username 4096 Aug 15 02:20 ..
-rw------- 1 username username 1675 Aug 15 02:21 .bash_history
-rw-r--r-- 1 username username  220 Aug 15 02:20 .bash_logout
-rw-r--r-- 1 username username 3771 Aug 15 02:20 .bashrc
drwx------ 1 username username 4096 Aug 15 02:20 .cache
drwxr-xr-x 1 username username 4096 Aug 15 02:20 .config
drwx------ 1 username username 4096 Aug 15 02:20 .gnupg
-rw-r--r-- 1 username username  807 Aug 15 02:20 .profile
-rw-r--r-- 1 username username    0 Aug 15 02:21 test.txt
登入後複製

總結

##使用Paramiko模組可以輕鬆實現SSH遠程操作。在本文中,我們介紹了Paramiko的基本用法,並示範如何在Python中使用Paramiko來遠端管理伺服器。無論是在雲端運算或物聯網領域,Paramiko都是一個非常有用的工具,可以幫助我們實現伺服器管理的自動化。

以上是Python伺服器程式設計:使用Paramiko實作SSH遠端操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板