轻松部署SFTP并解决连接未设置密钥的报错

简介: 尊敬的读者们,大家好!SFTP是一种基于SSH的加密文件传输协议,可确保您的数据在传输过程中得到保护,是一种可信赖的文件传输解决方案。在实际生产环境中,连接第三方SFTP服务器是许多企业进行文件传输的常见需求。然而,有时候当第三方SFTP服务器切换节点后,我们的服务连接却会出现失败的情况。我们今天就遇到了这种情况,第三方服务因国产化需求切换到了新的节点,导致我们的服务连接sftp服务器失败。在本文中,我将与您分享这个问题的原因以及解决方法以及如何使用Docker Compose快速部署SFTP(Secure File Transfer Protocol)服务,帮助您轻松应对类似的挑战。

sftp.jpg

尊敬的读者们,大家好!SFTP是一种基于SSH的加密文件传输协议,可确保您的数据在传输过程中得到保护,是一种可信赖的文件传输解决方案。在实际生产环境中,连接第三方SFTP服务器是许多企业进行文件传输的常见需求。然而,有时候当第三方SFTP服务器切换节点后,我们的服务连接却会出现失败的情况。我们今天就遇到了这种情况,第三方服务因国产化需求切换到了新的节点,导致我们的服务连接sftp服务器失败。在本文中,我将与您分享这个问题的原因以及解决方法以及如何使用Docker Compose快速部署SFTP(Secure File Transfer Protocol)服务,帮助您轻松应对类似的挑战。

问题现象

首先,让我们来了解一下这个问题的现象。当第三方SFTP服务器切换到新的节点后,您的服务尝试连接该服务器可能会遇到连接失败的情况。这种问题通常表现为无法建立SFTP连接,错误信息可能包括"Connection refused"、"Host key verification failed"或"Permission denied"等。我们的报错信息如下:

2023-07-19 10:30:52,166 [queueListenerContainer-13] ERROR [cn.xj.common.ftp.FtpUtils] - 链接FTP异常 connection is closed by foreign host
com.jcraft.jsch.JSchException: connection is closed by foreign host
        at com.jcraft.jsch.Session.connect(Session.java:269)
        at com.jcraft.jsch.Session.connect(Session.java:183)
        at cn.leadeon.common.ftp.FtpUtils.getConnect(FtpUtils.java:64)
        at cn.leadeon.activemq.MessageReceiverListener.downJsonFile(MessageReceiverListener.java:152)
        at cn.leadeon.activemq.MessageReceiverListener.onMessage(MessageReceiverListener.java:128)
        at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:744)
        at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:682)
        at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:649)
        at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:317)
        at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:255)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1167)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1159)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1056)
        at java.lang.Thread.run(Thread.java:745)

问题原因

SFTP连接失败的主要原因是与新节点相关的SSH密钥变化。每个SFTP服务器都有其独特的SSH密钥对(公钥和私钥),用于加密通信和身份验证。当SFTP服务器切换到新的节点时,其密钥对可能会发生变化,导致我们之前保存的旧密钥无法通过新节点进行验证,从而引起连接失败。

解决方法

我们手动在服务器是上连接第三方sftp,并重新生成秘钥

_20230719233551.png

sftp服务部署(docker-compose)

确保我们的服务器已经安装了docker及docker-compose。

在您选择的目录下创建一个新文件,并将其命名为 docker-compose.yml。在该文件中,我们将定义 sftp 服务的配置。

docker-compose.yml

version: '3.3'
services:
  sftp-server:
    image: atmoz/sftp:latest
    container_name: sftp-server
    restart: always
    ports:
      # 将主机的端口2222映射到容器的端口22(SFTP默认端口)
      - "2222:22"
    volumes:
      - ./data:/home
    command: admin:admin:1100

启动服务

dockerr-compose up -d

终端连接sftp,首次连接需要生成生成密钥

sftp -P2222 admin@192.168.10.106

_20230719235006.png

上传文件

put /home/xiuji/a.png

若出现权限问题,则修改挂载用户目录的权限
_20230719235220.png

sudo chmod -R 777 admin

创建文件夹、上传、下载文件

mkdir test

cd test

put /home/xiuji/a.png

get a.png

_20230719235659.png

结语

通过使用Docker Compose快速部署SFTP服务,我们成功创建了一个安全、高效的文件传输环境。SFTP不仅保护了您的数据安全,而且在搭建和管理过程中也非常便捷。希望本文对您在实现安全文件传输方面有所帮助。

目录
相关文章
|
网络协议 Linux 数据安全/隐私保护
如何在Windows本地快速搭建SFTP文件服务器,并通过端口映射实现公网远程访问
如何在Windows本地快速搭建SFTP文件服务器,并通过端口映射实现公网远程访问
11244 1
|
4月前
|
人工智能 搜索推荐 测试技术
国家开始支持一人公司了,我做了一年的感想
深圳最高补贴 1000 万,OPC 写进政府工作报告。而我已经一个人做了快一年——没补贴没社区,用 AI 从零做了一个 SaaS。政策是好事,但真正的门槛不是工具,是持续执行力。
|
8月前
|
人工智能 API 调度
我用 n8n 教自动化,结果自己在干最蠢的活
作者本为学员免费开通n8n账号,却因频繁手动操作陷入效率困境。起初尝试全自动流程,反被滥用;最终引入“人在回路”(HITL)机制,结合自动化与人工审核,用飞书审批实现高效协作。真正高效的自动化,是让机器处理重复工作,人类专注核心决策。
|
12月前
|
人工智能 算法 开发工具
快手封号一般封多久?
一、封禁时长梯度设计原理
|
监控 Java Linux
监控堆外使用操作系统工具
监控堆外使用操作系统工具
305 9
|
Java 关系型数据库 MySQL
SonarQube——如何搭建SonarQube完整版
SonarQube——如何搭建SonarQube完整版
715 0
SonarQube——如何搭建SonarQube完整版
|
存储 自然语言处理 Java
|
前端开发 JavaScript
HTML+CSS+JS 倒计时动画效果
HTML+CSS+JS 倒计时动画效果
|
存储 5G API
来了,永久免费的图床服务
Markdown爱好者推荐PicGo软件搭配免费图床服务SMMS,解决在Markdown中插入图片的困扰。PicGo支持多种图床,如腾讯云、阿里云和免费的SMMS,提供拖拽上传、压缩图片功能。通过VSCode或Typora配合PicGo插件,能实现图片自动上传并转换为Markdown格式。SMMS提供5GB免费存储,足够个人博客使用。