看日志报出的错误,It is required that your private key files are NOT accessible by others,翻译就是需要私钥文件不能被其他人所访问。私钥是访问linux服务器的凭证,如果被别人获取到,就可能对服务器安全造成影响,这可能也就是这个问题的初衷吧。
通过
API,您无需了解实施原理,也能将您的产品或服务与其他的互通。这样可以简化应用的开发,节省时间和成本。在您开发新的工具和产品,或管理现有工具和产品时,强大灵活的
API 可以帮助您简化设计、管理和使用,并带来更多创新机遇。
API
有时被视为合同,而合同文本则代表了各方之间的协议:如果一方以特定方式发送远程请求,该协议规定了另一方的软件将如何做出响应。
由于 API 简化了开发人员将新应用组件集成到现有基础架构中的方式,继而也对业务和
IT
团队之间的协作提供了帮助。随着数字市场日新月异,业务需求通常也会出现迅速变化,新的竞争对手利用新的应用即可改变整个行业。为了保持竞争力,支持快速开发和部署创新服务尤为重要。云原生应用开发是提高开发速度的一个明确办法,依赖于通过
API 连接微服务应用架构。
API
是通过云原生应用开发来连接您自己的基础架构的一个简化方式,此外还支持您向客户和其他外部用户分享您的数据。公共
API
有着独特的商业价值,因其可以简化和扩展您与合作伙伴的联系方式,并有望支持您从数据中实现盈利(Google
Maps API 便是其中一个广为人知的案例)。
简而言之,API 既能让您开放自己的资源访问权限,又能确保安全性并让您继续握有控制权。如何以及向谁开放访问权限由您自己决定。API
安全防护离不开良好的 API 管理,其中包括对 API
网关的使用。借助通联各种资源(包括传统系统和物联网,IoT)的分布式集成平台,您可以连接至
API 并创建使用 API 提供的数据或功能的应用。
API 发行政策
私有
这类 API 仅供内部使用,能让公司最大限度地控制自己的 API。
合作伙伴
您会和特定的业务合作伙伴共享这类
API。它能在不影响质量的情况下带来额外收益。
公共
这类 API 可供所有人使用。第三方可以使用这类 API
来开发应用,以便与您的 API 进行互动或实现某种创新。
API
概念的出现,始于计算机时代的初期,远远早于个人电脑诞生之前。当时,API
常被当作操作系统的库,而且基本上都在本地系统上运行,仅偶尔用于大型机之间传递消息。将近
30 年后,API 走出了它们的本地环境。到了 21 世纪初,API
成为了用于实现数据远程集成的一种重要技术。
远程 API
远程 API 旨在通过通信网络进行互动。这里的_远程_是指 API
操控的资源不在提出请求的计算机上。由于互联网是应用最广泛的通信网络,所以大多数
API 都是基于 Web 标准来设计的。并非所有的远程 API 都是 Web
API,但可以认为 Web API 都是远程 API。
Web API 通常会使用 HTTP
来传输请求消息,并提供响应消息的结构定义。这些响应消息通常都会以 XML 或
JSON 文件的形式来提供。XML 和 JSON
都是首选格式,因为它们会以易于其他应用操纵的方式来呈现数据。
SOAP 和 REST
随着 Web API
的不断普及,相应的协议规范也随之产生了,从而推动了信息交换的标准化:简单对象访问协议,简称
SOAP。使用 SOAP 设计的 API 会使用 XML 格式来收发消息,并通过 HTTP 或
SMTP 来接收请求。使用 SOAP
时,在不同环境中运行的应用或使用不同语言编写的应用能够更加轻松地共享信息。
相关的规范还有一个,即表述性状态传递(REST)。遵循
REST 架构约束的 Web API 被称为 RESTful API。REST 与 SOAP
有着根本区别:SOAP 是一种协议,而 REST 是一种架构风格。这意味着 RESTful
Web API 没有官方标准。正如 Roy Fielding 在论文“Architectural Styles and
the Design of Network-based Software
Architectures”(架构模式以及基于网络的软件架构的设计)中定义的那样,只要
API 符合 RESTful 系统的 6 个导向性约束,就算作 RESTful API:
虽然看似有很多约束需要遵循,但是这些约束遵循起来要比遵循规定的协议容易得多。因此,RESTful
API 现在变得比 SOAP 更为普及。
近年来,OpenAPI 规范已发展成为定义 REST API 的通用标准。OpenAPI
为开发人员提供了一种与语言无关的方式来构建 REST API
接口,从而最大程度减少不确定的因素,让用户安心工作。
另一个新兴的 API 标准是 GraphQL,这是一种可替代
REST 的查询语言和服务器端运行时。GraphQL
可优先让客户端准确地获得所需的数据,没有任何冗多余。作为 REST
的替代方案,GraphQL 允许开发人员构建相应的请求,从而通过单个 API
调用从多个数据源中提取数据。
SOA 与微服务架构
最常使用远程 API 的 2 种架构方案分别是:面向服务的架构(SOA)和微服务架构。在这
2 种方案中,SOA
的历史更为久远一些。最初,它是在单体式应用的基础上经过改进而形成的。虽然单个单体式应用也可以完成各种操作,但通过某种集成模式(如企业服务总线(ESB))在不同应用间实现松散耦合后,即可获得某些功能。
从大多数层面来看,SOA
都要比单体式架构更简单;但是,如果无法明确理解各种组件交互,SOA
也可能会进一步加剧整个环境的复杂性。这种复杂性的加剧会重新引发 SOA
想要解决的某些问题。
对于专用松散耦合服务的使用,微服务架构与 SOA
模式类似。但是,微服务架构会对传统架构进行进一步细分。在微服务架构中,服务会采用通用消息传递框架,如
RESTful API。它们会使用 RESTful API
来实现相互通信,且无需执行繁琐的数据转换处理或使用其他的集成层。使用
RESTful API 可以加速新功能和新更新的交付;甚至还可以说,是这类 API
促进了这种速度的提升。该架构中的每一个服务都呈离散状态。一个服务可以被取代、增强或丢弃,而不会影响架构中的任何其他服务。这种轻量级架构有助于优化分布式资源或云资源,而且能够支持个别服务的动态扩展。
In this guide we are going to set up an sftp server on an Arch Linux
system. We will also set up a form of chroot where users can only access
sftp with the shared credentials.
The File Transfer Protocol is a standard communication protocol used
for the transfer of computer files from a server to a client on a
computer network.
FTP isn’t popular today because it Lacks Security. When a file is
sent using this protocol, the data, username, and password are all
shared in plain text, which means a hacker can access this information
with little to no effort. For data to be secure, you need to use an
upgraded version of FTP like SFTP.
SFTP Secure File Transfer Protocol is a file transfer protocol that
provide secure access to a remote computer to deliver secure
communications. It leverages SSH – Secure Socket Shell and is frequently
also referred to as ‘Secure Shell File Transfer Protocol’.
$ sudo systemctl status sshd ● sshd.service - OpenSSH Daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2021-12-03 10:19:02 UTC; 17min ago Main PID: 467 (sshd) Tasks: 1 (limit: 4606) Memory: 5.0M CGroup: /system.slice/sshd.service └─467 sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups
Dec 04 14:53:30 ip-10-2-40-103 sshd[13109]: Unable to negotiate with 141.98.10.246 port 34078: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc> Dec 04 14:53:42 ip-10-2-40-103 sshd[13111]: Unable to negotiate with 141.98.10.246 port 38674: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc> Dec 04 14:53:53 ip-10-2-40-103 sshd[13115]: Unable to negotiate with 141.98.10.246 port 43268: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc> Dec 04 14:54:05 ip-10-2-40-103 sshd[13117]: Unable to negotiate with 141.98.10.246 port 47864: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc> Dec 04 14:54:17 ip-10-2-40-103 sshd[13119]: Unable to negotiate with 141.98.10.246 port 52460: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc> Dec 04 14:54:41 ip-10-2-40-103 sshd[13123]: Unable to negotiate with 141.98.10.246 port 33418: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc> Dec 04 14:54:53 ip-10-2-40-103 sshd[13127]: Unable to negotiate with 141.98.10.246 port 38014: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc> Dec 04 14:55:05 ip-10-2-40-103 sshd[13129]: Unable to negotiate with 141.98.10.246 port 42614: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc> Dec 04 15:16:10 ip-10-2-40-103 sshd[13191]: Received disconnect from 61.177.173.21 port 60983:11: [preauth] Dec 04 15:16:10 ip-10-2-40-103 sshd[13191]: Disconnected from authenticating user root 61.177.173.21 port 60983 [preauth]
Now that we have installed the necessary software and created the
users and groups, let us configure ssh.
Ensure password authentication is enabled for ssh. Edit the config
file here /etc/ssh/sshd_config:
1
sudo vim /etc/ssh/sshd_config
Then ensure this line is not commented:
1
PasswordAuthentication yes
Next, we need to add rules for the users in
the sftpusers group to be considered as sftp. Edit the
config file:
1
sudo vim /etc/ssh/sshd_config
Add this content at the bottom of the file:
1 2 3 4 5
Match Group sftpusers X11Forwarding no AllowTcpForwarding no ChrootDirectory /srv/sftp ForceCommand internal-sftp
Then restart sshd to reload the config:
1
sudo systemctl restart sshd
Verify that sshd is running as expected:
1 2 3 4 5 6 7 8 9 10 11 12 13
$ sudo systemctl status sshd ● sshd.service - OpenSSH Daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2021-12-04 15:48:19 UTC; 18s ago Main PID: 14269 (sshd) Tasks: 1 (limit: 4606) Memory: 892.0K CGroup: /system.slice/sshd.service └─14269 sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups
Dec 04 15:48:19 ip-10-2-40-103 systemd[1]: Started OpenSSH Daemon. Dec 04 15:48:19 ip-10-2-40-103 sshd[14269]: Server listening on 0.0.0.0 port 22. Dec 04 15:48:19 ip-10-2-40-103 sshd[14269]: Server listening on :: port 22.
Now we have sftp server up and running with a user configured!
The users will be able to login to the server and access files and
directories located in their home directory. If you want to give the
user to other directories outside their own directory, just make sure
the user has enough rights to access. These directories and files have
to be within the sftp directory – /srv/sftp.
Example: if i want user to access the
directory /srv/sftp/paymentfiles, do the following:
Create the directory
1
sudo mkdir /srv/sftp/paymentfiles
Then assign the user(citizix) access by making them own
the directory: