如何实现服务器远程对本地主机文件读写
本来以为实现服务器远程操作本地数据库已经是“轻舟已过万重山”了,但是后面意识到,如果不直接将模型中必要的图片直接保存到本地指定文件夹下的话,中间一来一回需要再额外开销不少时间,因此这里再记录一下我是怎么实现服务器远程对本地主机文件读写的。
1、安装OpenSSH Server(win10及以上版本都适用)
(1)安装OpenSSH Server
打开 设置 -> 系统 -> 可选功能。
点击 “添加功能”,然后从列表中找到 “OpenSSH服务器”,点击 “安装”。
将启动类型设置为 “自动”,然后如果服务尚未运行,点击 “启动” 按钮。
点击 “应用” 和 “确定” 保存设置。
(2)配置OpenSSH
OpenSSH的配置文件通常位于 **‘C:\ProgramData\ssh’**目录下的 ‘sshd_config’ 文件。
以管理员权限先打开记事本,然后再打开该文件,对其进行以下编辑操作:
PermitRootLogin yes
(这个主要是为了允许root用户能够访问)
PasswordAuthentication yes
(允许使用密码认证)
修改完配置文件之后,记得重启OpenSSH服务。
(按Win + R,输入services.msc,然后按Enter打开服务管理器;向下滚动到“OpenSSH SSH Server”,右键点击它,选择“重启”。)
2、防火墙添加配置
“控制面板” -> “Windows Defender 防火墙” -> “高级设置” -> “入站规则” -> “新建规则”。
规则类型选择 “端口”。
协议选择 “TCP”,端口选择 “特定本地端口”,“22”。
后面除了需要给它起个名字,都默认用它的选项即可。
3、IP映射
这里需要把你本地主机的内网IP地址和22端口映射到外网上,不然访问不到,具体该怎么映射,我的上一篇博客有讲(还是挺简单的)。
4、远程操作代码
在本机上的配置已经讲完了,现在讲一讲该怎么在服务器那端进行操作。
(1)安装Paramiko
首先,确保你的环境中安装了paramiko库。如果没有,可以通过pip安装:
pip install paramiko
(2)编写python脚本
以下是一个python脚本示例,如何将服务器上的某张图片保存到你电脑上的某个文件夹下。
import paramiko
def sftp():
host = '主机IP映射后的IP地址'
port = '映射后的端口号'
username = '你主机上的用户名'
password = '密码'
local_file_path = 'img/abgr.jpg'
# 创建SSH客户端实例
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
# 连接到远程主机
client.connect(hostname=host, port=port, username=username, password=password)
# 创建SFTP会话
sftp = client.open_sftp()
# 远程文件路径
remote_file_path = f"D:/Flask/img/success.jpg"
# 将本地文件上传到远程服务器
sftp.put(local_file_path, remote_file_path)
# 关闭SFTP会话
sftp.close()
print(f"File saved successfully to {remote_file_path}")
except Exception as e:
print(f"An error occurred: {e}")
finally:
# 关闭SSH客户端
client.close()
# 调用测试
sftp()
5、相关问题
(1)本机的用户名和密码
打开命令提示符并输入:
echo %USERNAME%
但是其实会有一点问题,那就是可能你把密码给忘了或者密码对不上,这时候可以再重新创建一个本地用户,使用管理员权限打开命令提示符,输入以下命令:
net user username password /add
其中username和password是你的新添加的本地用户的用户名和密码。
(2)免密登录
正常来讲,是可以通过公钥认证来实现免密登录的,但是我挣了很久,公钥认证哪里一直通不过,总感觉是我本机文件上的用户权限问题,所以这里就不写了。
(当然这篇博客写得也并不是很详细,只是简单记录一下,可能很多我踩过的坑和细节没有展示出来,有问题可以提出来。)