SSHD SFTP 服务端 证书认证

import org.apache.sshd.common.config.keys.AuthorizedKeyEntry;
import org.apache.sshd.common.config.keys.KeyUtils;
import org.apache.sshd.common.config.keys.PublicKeyEntryResolver;




SshServer sshServer = SshServer.setUpDefaultServer();
sshServer.setSubsystemFactories(Collections.singletonList(new SftpSubsystemFactory()));
sshServer.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(new File("一个服务器证书.pem文件").toPath()));
sshServer.setPort(XXXX);
sshServer.setPublickeyAuthenticator(new PublickeyAuthenticator() {
    @Override
    public boolean authenticate(String username, PublicKey publicKey, ServerSession serverSession) throws AsyncAuthException {

        if ("用户名".equals(username)) {
            List<PublicKey> list = getPublicKeyList();
            for (PublicKey publicKey_exist : list) {
                boolean result = KeyUtils.compareKeys(publicKey, publicKey_exist);
                if (result) {
                    sshServer.setFileSys
### 配置 SFTP 服务端使用 RSA 密钥认证 #### 1. 创建 SFTP 用户并限制其权限 为了确保 SFTP 用户无法通过 SSH 登录服务器,首先需要创建一个仅用于 SFTP 的用户,并且配置其权限限制。 ```bash # 创建一个新的用户,例如 "sftpuser" useradd -m -s /bin/false sftpuser # 设置用户密码(可选) passwd sftpuser ``` - `-m`:创建用户的主目录。 - `-s /bin/false`:禁止用户登录到系统,仅允许 SFTP 传输文件。 #### 2. 配置 SSH 以启用 SFTP 和 RSA 密钥认证 编辑 `/etc/ssh/sshd_config` 文件,确保以下配置项已启用: ```bash # 禁用密码登录,仅允许密钥认证 PasswordAuthentication no # 启用密钥认证 PubkeyAuthentication yes # 指定 RSA 认证(可选) RSAAuthentication yes # 指定公钥文件路径(可选) AuthorizedKeysFile /home/sftpuser/.ssh/authorized_keys # 禁止 root 登录 PermitRootLogin no # 配置 SFTP 子系统 Match User sftpuser ChrootDirectory /home/sftpuser ForceCommand internal-sftp AllowTcpForwarding no ``` - `ChrootDirectory`:指定用户登录后的根目录,防止其访问服务器其他部分。 - `ForceCommand internal-sftp`:强制用户仅使用 SFTP,不能执行其他命令。 - `AllowTcpForwarding no`:禁用 TCP 转发,防止用户通过 SSH 隧道访问其他服务。 #### 3. 生成 RSA 密钥对 在客户端生成 RSA 密钥对,用于认证登录。 ```bash # 生成 RSA 密钥对 ssh-keygen -t rsa -b 4096 -C "sftpuser@example.com" # 指定保存路径(默认为 ~/.ssh/id_rsa) Enter file in which to save the key (/home/sftpuser/.ssh/id_rsa): ``` - `-t rsa`:指定密钥类型为 RSA。 - `-b 4096`:指定密钥长度为 4096 位,增强安全性。 - `-C`:添加注释信息,用于标识密钥用途。 #### 4. 将公钥上传到 SFTP 服务端 将客户端生成的公钥上传到 SFTP 服务端,并添加到 `authorized_keys` 文件中。 ```bash # 将公钥上传到服务器 ssh-copy-id -i ~/.ssh/id_rsa.pub sftpuser@<server_ip> # 或者手动复制公钥内容到服务器 cat ~/.ssh/id_rsa.pub | ssh sftpuser@<server_ip> "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" ``` - `-i`:指定公钥文件路径。 - `ssh-copy-id`:自动将公钥添加到远程主机的 `~/.ssh/authorized_keys` 文件中。 #### 5. 设置文件权限 确保 SFTP 用户的目录和文件权限设置正确,以避免 SSH 拒绝登录。 ```bash # 设置用户主目录权限 chown root:root /home/sftpuser chmod 755 /home/sftpuser # 创建用户上传目录(例如 uploads) mkdir /home/sftpuser/uploads chown sftpuser:sftpuser /home/sftpuser/uploads chmod 755 /home/sftpuser/uploads # 设置 .ssh 目录权限 chown sftpuser:sftpuser /home/sftpuser/.ssh chmod 700 /home/sftpuser/.ssh # 设置 authorized_keys 文件权限 chown sftpuser:sftpuser /home/sftpuser/.ssh/authorized_keys chmod 600 /home/sftpuser/.ssh/authorized_keys ``` - `chown`:更改文件或目录的所有者和组。 - `chmod`:更改文件或目录的权限。 #### 6. 重启 SSH 服务 完成配置后,重启 SSH 服务以应用更改。 ```bash # 重启 SSH 服务 systemctl restart sshd ``` - `systemctl`:管理系统和服务的工具。 - `restart sshd`:重启 SSH 服务。 #### 7. 测试 SFTP 连接 使用 SFTP 客户端测试连接,确保可以正常登录并传输文件。 ```bash # 使用 SFTP 连接服务器 sftp -i ~/.ssh/id_rsa sftpuser@<server_ip> ``` - `-i`:指定私钥文件路径。 - `sftp`:启动 SFTP 客户端。 #### 8. 配置非标准端口(可选) 如果希望 SFTP 使用非标准端口(例如 2222),可以在 `/etc/ssh/sshd_config` 中修改以下配置: ```bash Port 2222 ``` 然后在客户端连接时指定端口: ```bash sftp -oPort=2222 -i ~/.ssh/id_rsa sftpuser@<server_ip> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值