您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么遠程執(zhí)行Linux腳本和命令”,在日常操作中,相信很多人在怎么遠程執(zhí)行Linux腳本和命令問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么遠程執(zhí)行Linux腳本和命令”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
如果現(xiàn)在需要在 Linux 服務器上執(zhí)行一系列命令(比如搭建 LNMP 環(huán)境)我應該會第一時間想到想辦法寫個 Shell 腳本,然后扔上去執(zhí)行以下看看結果。
然而一貫懶惰的我并不想這么去執(zhí)行 Shell 和一些重復命令。所以俺尋思可以有個方法本地直接在服務器端執(zhí)行腳本,尋思生異端,這時候有某大技霸告訴我有個叫 paramiko 的 Python 庫,從此開啟我新世界的大門。
對于 paramiko 安裝直接 pip 或者 PyCharm 這里就不多說了,如果看到這里你覺得自己不怎么了解python語法的也不必擔心,你完全可以用 paramiko 單純的執(zhí)行 Shell 命令查看結果和上傳下載文件,省去重復的工作。
paramiko 實現(xiàn)了 SSHv2 協(xié)議(底層使用 cryptography ),包含兩個核心組件:SSHClient 和 SFTPClient 。 SSHClient 是對 SSH 會話的封裝,用于執(zhí)行遠程命令,SFTPClient 是對 SFTP 客戶端的封裝,用以實現(xiàn)遠程文件操作。
這里先舉兩個列子你應該就明白怎么用了,終于開始正片了。
SSHClient 的列子:
# -*- coding: utf-8 -*-
import paramiko
client = paramiko.SSHClient()# 實例化SSHClient
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 自動添加策略,保存服務器的主機名和密鑰信息,如果不添加,那么不再本地know_hosts文件中記錄的主機將無法連接
client.connect(hostname='192.168.23.134', port=22, username='ftoz', password='123456')# 連接SSH服務端,以用戶名和密碼進行認證
# 打開一個Channel并執(zhí)行命令
stdin, stdout, stderr = client.exec_command('ls') # stdout 為正確輸出,stderr為錯誤輸出,同時是有1個變量有值
# 打印執(zhí)行結果
print(stdout.read().decode('utf-8'))
# 關閉SSHClient
client.close()
輸出:
這里說明一下:
client = paramiko.SSHClient(),
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())你可以理解為固定姿勢。
client.connect(hostname='192.168.1.105', port=22, username='ftoz',password='123456')這里就是你的linux變量依次為地址、端口(總共65535個端口,不過ssh默認是22端口)、登錄名、密碼。
stdin, stdout, stderr = client.exec_command('df -h ') 這里就是核心你需要做的shell命令,這三個變量不用按照這種姿勢,你可以隨意,不過按照順序你知道里面裝的什么數(shù)據(jù)就行(重點在輸出和錯誤)。
connect():這個是實現(xiàn)遠程服務器連接和認證的,參數(shù)有:
hostname 連接的目標主機
port=SSH_PORT 指定端口
username=None 驗證的用戶名
password=None 驗證的用戶密碼
pkey=None 私鑰方式用于身份驗證
key_filename=None 一個文件名或文件列表,指定私鑰文件
timeout=None 可選的tcp連接超時時間
allow_agent=True, 是否允許連接到ssh代理,默認為True 允許
look_for_keys=True 是否在~/.ssh中搜索私鑰文件,默認為True 允許
compress=False, 是否打開壓縮。
set_missing_host_key_policy():這個是設置遠程服務器沒有在know_hosts文件中記錄時的應對策略。(可以理解為避免報錯),參數(shù)有:
AutoAddPolicy 自動添加主機名及主機密鑰到本地HostKeys對象,不依賴load_system_host_key的配置。即新建立ssh連接時不需要再輸入yes或no進行確認
WarningPolicy 用于記錄一個未知的主機密鑰的python警告。并接受,功能上和AutoAddPolicy類似,但是會提示是新連接
RejectPolicy 自動拒絕未知的主機名和密鑰,依賴load_system_host_key的配置。此為默認選項
exec_command():這是寫你需要執(zhí)行的命令的
接下來你就可以拿出輸出做一些該干嘛(ke)干嘛(pa)的事情了,這里先舉這個簡單的列子。
SFTPClient 常用方法:
t = paramiko.Transport(('192.168.23.134', 22))# 獲取Transport實例
t.connect(username='ftoz', password='123456')# 連接SSH服務端,使用password
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put("F:\S12312.txt","/home/ftoz/zxc12312.txt")#執(zhí)行上傳動作
sftp.get("/home/ftoz/zxc12312.txt", "F:\S12312.txt")#執(zhí)行下載動作
t.close()
SFTPCLient 作為一個 sftp 的客戶端對象,根據(jù) ssh 傳輸協(xié)議的 sftp 會話,實現(xiàn)遠程文件操作,如上傳、下載、權限、狀態(tài)
from_transport(cls,t) 創(chuàng)建一個已連通的SFTP客戶端通道
put(localpath, remotepath, callback=None, confirm=True) 將本地文件上傳到服務器 參數(shù)confirm:是否調用stat()方法檢查文件狀態(tài),返回ls -l的結果
get(remotepath, localpath, callback=None) 從服務器下載文件到本地
mkdir() 在服務器上創(chuàng)建目錄
remove() 在服務器上刪除目錄
rename() 在服務器上重命名目錄
stat() 查看服務器文件狀態(tài)
listdir() 列出服務器目錄下的文件
最后養(yǎng)成隨關閉的好習慣 client.close()。
到此,關于“怎么遠程執(zhí)行Linux腳本和命令”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。