Django中paramiko使用密鑰執行命令和上傳文件

這幾天寫一個遊戲維護的平臺,剛開始是直接用賬號和密碼直接明文登陸的,發現這樣很不安全,現在改爲密鑰登陸執行命令和上傳文件,在這裏做個記錄,方便以後查閱。先來看一下功能:
執行命令和上傳文件的步驟:
第一步:製作密鑰對
首先在服務器上製作密鑰對。首先用密碼登錄到你打算使用密鑰登錄的賬戶,然後執行以下命令:
這裏寫圖片描述

第二步:在服務器上安裝公鑰
鍵入以下命令,在服務器上安裝公鑰:
這裏寫圖片描述

第三步:設置 SSH,打開密鑰登錄功能
編輯 /etc/ssh/sshd_config 文件,進行如下設置:
這裏寫圖片描述

第四步:將私鑰下載到客戶端,如這裏的SecureCRT
輸入Hostname,Username,選擇認證方式爲PublicKey公鑰認證,選擇剛剛下載下來的id_rsa私鑰文件即可!
這裏寫圖片描述

如果能成功登陸,說明你的密鑰已經配好了,接下來就是paramiko通過密鑰執行命令和傳文件的代碼:

# 執行命令
def exec_command(comm, hostname, username, password):
    ssh = paramiko.SSHClient()
    # 使用密鑰登陸Linux
    ssh.load_system_host_keys()
    privatekey = os.path.expanduser(password)
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    key = paramiko.RSAKey.from_private_key_file(privatekey)

    ssh.connect(hostname=hostname, username=username, pkey=key)
    stdin, stdout, stderr = ssh.exec_command(comm)
    result = stdout.read() + stderr.read()
    # print(result.decode('utf-8'))
    ssh.close()
    return result
# 上傳文件
def put_file(local_path, remote_path, hostname, username, password, port=22):
    ssh = paramiko.SSHClient()
    # 使用密鑰登陸Linux
    ssh.load_system_host_keys()
    privatekey = os.path.expanduser(password)
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    key = paramiko.RSAKey.from_private_key_file(privatekey)
    ssh.connect(hostname=hostname, username=username, pkey=key)

    t = ssh.get_transport()
    sftp = paramiko.SFTPClient.from_transport(t)
    sftp.put(local_path, remote_path)
    sftp.close()

這個是前面生成的私鑰存放地址:
這裏寫圖片描述

我這裏是定義的兩個函數,調用函數的時候把對應的參數傳入進行調用即可。

上面配置密鑰的步驟都是是複製的langkeziju的專欄,在此感謝你的博客幫我解決了paramiko密鑰登陸Linux的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章