python操作ssh上傳和下載文件
1.筆者環境
os:macos
python:3.7.5
2.項目地址
3.依賴來安裝包
pip install paramiko
pip install scp
4.項目結構
├── download_file.py # 下載文件
├── main.py # 程序入口
├── settings.py # 配置
└── upload_file.py # 上傳文件
5.代碼示例:
# upload_file.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import paramiko
from scp import SCPClient
from settings import HOST
from settings import PORT
from settings import USERNAME
from settings import PASSWORD
from settings import UPLOAD_SERVER_REMOTE_PATH
from settings import UPLOAD_LOCAL_FILE_PATG
def upload_file():
"""
上傳文件
:return:
"""
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh_client.connect(HOST, PORT, USERNAME, PASSWORD)
scp_client = SCPClient(ssh_client.get_transport(), socket_timeout=15.0)
try:
scp_client.put(UPLOAD_LOCAL_FILE_PATG, UPLOAD_SERVER_REMOTE_PATH)
except FileNotFoundError as e:
print(e)
print("系統找不到指定文件" + UPLOAD_LOCAL_FILE_PATG)
else:
print("文件上傳成功")
ssh_client.close()
# download_file.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import paramiko
from scp import SCPClient
from settings import HOST
from settings import PORT
from settings import USERNAME
from settings import PASSWORD
from settings import DOWNLOAD_LOCAL_FILE_PATH
from settings import DOWNLOAD_SERVER_REMOTE_PATH
def download_file():
"""
下載文件
:return:
"""
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh_client.connect(HOST, PORT, USERNAME, PASSWORD)
scp_client = SCPClient(ssh_client.get_transport(), socket_timeout=15.0)
try:
scp_client.get(DOWNLOAD_SERVER_REMOTE_PATH, DOWNLOAD_LOCAL_FILE_PATH)
except FileNotFoundError as e:
print(e)
print("系統找不到指定文件" + DOWNLOAD_SERVER_REMOTE_PATH)
else:
print("文件下載成功")
ssh_client.close()
# settings.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 公共配置
HOST = "xx.xx.xx.xx" # 服務器ip地址
PORT = 22 # 端口號
USERNAME = "xxxxxx" # 用戶名
PASSWORD = "xxxxxxx" # 密碼
# 上傳文件的配置
UPLOAD_SERVER_REMOTE_PATH = "/opt" # 要上傳的目標路徑
UPLOAD_LOCAL_FILE_PATG = "/Users/xxx/2.txt" # 本地文件的路徑
# 下載文件的配置
DOWNLOAD_SERVER_REMOTE_PATH = "/opt/3.txt" # 要下載的服務器上文件的位置
DOWNLOAD_LOCAL_FILE_PATH = "/Users/xxx" # 本地路徑
# main.py
from download_file import download_file
from upload_file import upload_file
def main():
print("upload_file...")
upload_file()
print("download_file...")
download_file()
if __name__ == '__main__':
main()