网络问题,下载很快,上传很慢,甚至不能上传过大或过多的文件到服务
网络问题,下载很快,上传很慢,甚至不能上传过大(压缩包)或过多的文件到服务器时的临时替补方法
本地windows,远程服务器Linux
一、方法:逐个文件用scp命令上传,且避免每次都要输入密码
1、设置 SSH 密钥认证:
在本地机器生成 SSH 密钥对(如果还没有生成), 打开 PowerShell 或 CMD 并运行以下命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按提示操作(一路回车即可),生成 C:\Users\YourUsername.ssh\id_rsa 和 id_rsa.pub 文件。
2、查看生成的公钥:
使用记事本或其他文本编辑器打开 id_rsa.pub 文件,复制其内容。
3、将公钥添加到远程服务器:
使用 SSH 登录到远程服务器:
ssh username@server
username:用户名
server:IP地址
在服务器上,编辑(或创建) ~/.ssh/authorized_keys 文件:
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys
将第2步复制的公钥内容粘贴到 authorized_keys 文件中,然后保存并退出编辑器。
4、设置合适的权限:
在服务器上,设置 ~/.ssh 和 authorized_keys 的权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
5、确保 SSH 密钥认证设置正确
测试无密码登录:确保可以通过以下命令无密码登录远程服务器:
ssh username@server
6、本地新建一个upload_files.bat文件,记事本打开后编辑内容如下:
@echo off
setlocal
REM 本地文件夹路径
set "LOCAL_DIR=C:\path\to\local\folder"
REM 远程服务器信息
set "REMOTE_USER=username"
set "REMOTE_HOST=server"
set "REMOTE_DIR=/path/to/remote/folder"
REM 创建远程目录(如果不存在)
echo Creating remote directory %REMOTE_DIR% if it does not exist
ssh %REMOTE_USER%@%REMOTE_HOST% "mkdir -p %REMOTE_DIR%"
REM 遍历本地文件夹中的所有文件并上传
for %%F in ("%LOCAL_DIR%\*") do (
if exist "%%F" (
set "FILENAME=%%~nxF"
echo Checking if %FILENAME% exists on %REMOTE_HOST%:%REMOTE_DIR%
REM 检测远程服务器目录中是否存在该文件
ssh %REMOTE_USER%@%REMOTE_HOST% "if [ -f %REMOTE_DIR%/%FILENAME% ]; then echo EXISTS; fi" > NUL 2>&1
if %errorlevel% == 0 (
echo %FILENAME% already exists on remote server, skipping upload.
) else (
echo Uploading %%F to %REMOTE_USER%@%REMOTE_HOST%:%REMOTE_DIR%
:retry
scp "%%F" %REMOTE_USER%@%REMOTE_HOST%:%REMOTE_DIR%
if %errorlevel% neq 0 (
echo Upload failed, retrying...
goto retry
)
echo Upload of %%F succeeded.
)
)
)
endlocal
pause
保存后双击运行
二、后续
删除不再使用的密钥对
当你不再使用某个密钥对时,最好将其从本地和远程服务器中删除,以防止潜在的安全风险。
删除本地私钥和公钥文件:C:\Users\YourUsername.ssh\id_rsa 和 id_rsa.pub 文件
从远程服务器删除公钥:
使用SSH连接到远程服务器,然后编辑 ~/.ssh/authorized_keys 文件,删除不再使用的公钥条目。
ssh user@remote_server
nano ~/.ssh/authorized_keys
在编辑器中找到对应的公钥条目并删除,然后保存文件并退出。