如何在 Linux 中处理 SFTP 登录时的“密码认证失败”错误

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

SFTP(安全文件传输协议)是一种网络协议,它提供了一种在远程系统之间安全可靠地传输文件的方式。它是安全外壳(SSH)协议的扩展,SSH协议广泛用于对服务器和其他网络设备进行安全的远程访问。本教程将指导你了解SFTP,配置认证方法,并在Linux环境中实施保障SFTP连接安全的最佳实践。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux/RemoteAccessandNetworkingGroup -.-> linux/ssh("Secure Connecting") linux/RemoteAccessandNetworkingGroup -.-> linux/scp("Secure Copying") linux/RemoteAccessandNetworkingGroup -.-> linux/sftp("Secure File Transferring") linux/RemoteAccessandNetworkingGroup -.-> linux/ftp("File Transferring") linux/RemoteAccessandNetworkingGroup -.-> linux/nc("Networking Utility") linux/PackagesandSoftwaresGroup -.-> linux/openssl("OpenSSL") subgraph Lab Skills linux/ssh -.-> lab-417341{{"如何在 Linux 中处理 SFTP 登录时的“密码认证失败”错误"}} linux/scp -.-> lab-417341{{"如何在 Linux 中处理 SFTP 登录时的“密码认证失败”错误"}} linux/sftp -.-> lab-417341{{"如何在 Linux 中处理 SFTP 登录时的“密码认证失败”错误"}} linux/ftp -.-> lab-417341{{"如何在 Linux 中处理 SFTP 登录时的“密码认证失败”错误"}} linux/nc -.-> lab-417341{{"如何在 Linux 中处理 SFTP 登录时的“密码认证失败”错误"}} linux/openssl -.-> lab-417341{{"如何在 Linux 中处理 SFTP 登录时的“密码认证失败”错误"}} end

理解使用 SFTP 进行安全文件传输

SFTP,即安全文件传输协议,是一种网络协议,它提供了一种在远程系统之间安全可靠地传输文件的方式。它是安全外壳(SSH)协议的扩展,SSH协议广泛用于对服务器和其他网络设备进行安全的远程访问。

与传统文件传输协议(如FTP(文件传输协议)和FTPS(基于SSL/TLS的FTP))相比,SFTP具有多个优势。SFTP的主要优点在于其固有的安全性,因为它会对整个文件传输过程进行加密,确保数据保持机密性并防止未经授权的访问。

SFTP的常见用例之一是在远程位置之间进行安全文件共享,例如传输敏感文档、财务数据或软件更新。SFTP还可用于远程系统管理,系统管理员可以在其中安全地上传、下载和管理远程服务器上的文件。

为了演示SFTP的用法,让我们考虑一个示例场景:你需要将一个文件从本地机器传输到远程Ubuntu 22.04服务器。假设你已与远程服务器建立了SSH连接,你可以使用以下命令启动一个SFTP会话:

sftp user@remote_server

连接成功后,你可以使用以下SFTP命令浏览远程文件系统、上传、下载和管理文件:

## 列出当前目录中的文件
ls

## 切换到不同的目录
cd /path/to/remote/directory

## 从本地上传文件到远程
put local_file.txt

## 从远程下载文件到本地
get remote_file.txt

## 退出SFTP会话
exit

这些基本的SFTP命令使你能够在本地机器和远程服务器之间安全地传输文件。SFTP协议确保文件传输过程被加密,保护数据不被窃听或未经授权的访问。

在接下来的部分中,我们将探讨更高级的SFTP功能,例如配置认证方法以及实施保障SFTP连接安全的最佳实践。

配置SFTP认证方法

SFTP支持多种认证方法,以确保对远程服务器的安全访问。两种最常见的认证方法是基于密码的认证和公钥认证。

基于密码的认证

基于密码的认证是最简单的方法,用户通过提供用户名和密码来与远程服务器进行认证。这种方法适用于小规模部署,或者在偶尔进行文件传输时使用SFTP的情况。要配置基于密码的认证,你可以使用以下命令:

sftp user@remote_server

出现提示时,输入正确的用户名和密码以建立SFTP连接。

公钥认证

公钥认证是一种更安全且推荐用于SFTP访问的方法,因为它无需在网络上共享密码。这种方法涉及生成一个公私钥对,并配置远程服务器接受公钥进行认证。

要在你的Ubuntu 22.04系统上设置公钥认证,请按照以下步骤操作:

  1. 使用ssh-keygen命令生成一个公私钥对:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
  1. 将生成的公钥(通常位于~/.ssh/id_rsa.pub)复制到远程服务器的授权密钥文件(通常是~/.ssh/authorized_keys)。

  2. 通过编辑SSH守护进程配置文件(/etc/ssh/sshd_config)并确保启用以下设置,来配置远程服务器使用公钥认证:

PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys
  1. 重启SSH守护进程以应用更改:
sudo systemctl restart sshd

现在,当你使用SFTP连接到远程服务器时,你可以使用以下命令用你的私钥进行认证:

sftp -i ~/.ssh/id_rsa user@remote_server

公钥认证方法提供了一个更安全且可扩展的解决方案,特别是对于有多个用户或服务器的环境,因为它无需管理和共享各个密码。

保障SFTP连接安全的最佳实践

为确保你的SFTP连接安全,实施最佳实践至关重要。以下是一些关键建议:

强制使用强加密

SFTP本身为文件传输过程提供加密,但你可以通过强制使用强加密算法进一步增强安全性。在SSH守护进程配置文件(/etc/ssh/sshd_config)中,你可以指定以下设置:

Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs [email protected],[email protected],[email protected]

这些设置将确保你的SFTP连接使用可用的最安全加密和消息认证算法。

使用防火墙限制访问

实施防火墙规则有助于控制和限制对SFTP服务器的访问。在你的Ubuntu 22.04系统上,你可以使用ufw(简单防火墙)工具创建防火墙规则,只允许在必要端口上进行SFTP流量。例如:

sudo ufw allow 22/tcp  ## 允许SSH/SFTP流量
sudo ufw enable

谨慎管理文件权限

确保SFTP服务器上的文件权限设置得当,以防止未经授权的访问或修改。使用chmod命令为通过SFTP可访问的文件和目录设置正确的权限。

启用日志记录和监控

为你的SFTP服务器启用全面的日志记录,以监控和审计用户活动。你可以配置SSH守护进程在系统日志文件中记录与SFTP相关的事件,这对于故障排除和安全分析很有用。

通过实施这些最佳实践,你可以显著增强SFTP连接的安全性,并在文件传输过程中保护你的敏感数据。

总结

在本教程中,你已经学习了如何使用SFTP在本地机器和远程Linux服务器之间安全地传输文件。你已经探究了SFTP相较于传统文件传输协议(如通过加密实现的固有安全性)的优势。你还学习了如何配置SFTP认证方法以及实施保障SFTP连接安全的最佳实践,从而在文件传输过程中确保数据的机密性和完整性。通过掌握SFTP,你可以在基于Linux的环境中增强远程文件管理和共享工作流程的安全性。