Centos服务器SSH配置及开通SFTP服务

Centos已经用了很多了,有时候登录还是密码登录,仅以此文记录下修改服务器ssh证书登录和开启服务器sftp服务的过程,加深记忆。

服务器开启SSH证书登录和修改ssh端口

  1. 首先是使用命令生成一对RSA公钥和私钥,公钥上传到服务器,私钥本地登录使用。

    1
    ssh-keygen -t rsa -C "lc-server"

    lc-server

  2. 将xxx.pub改名(或拷贝、添加到)~/.ssh/authorized_keys文件

    1
    cp lc-server.pub  .ssh/lc-server.pub

    cp

  3. 修改xxx.pub文件权限为0600
    1
    chmod 600 lc-server.pub
    chmod
  4. 修改/etc/ssh/sshd_config文件,然后重启sshd服务,如果是root用证书,则第一行是必须的,同时为了禁止密码登录服务器可以把第三个yes改为no,当然这需要使用证书登录成功之后修改。
    1
    systemctl restart sshd
    auth
  5. 私钥的格式问题:
    如果是putty使用证书登陆,需要将私钥id_rsa文件格式转为ppk格式,使用putty提供的puttygen.exe,使用load加载本地私钥文件,然后使用save 保存为putty的ppk格式的私钥。
    ppk
  6. 使用putty登录:
    login1
    login2
    login3

服务器开启SFTP服务

  1. 检查 openssh 版本–如果需要使用 ChrootDirectory 参数配置用户访问的默认路径,openssh 的版本不能低于 4.8
    1
    ssh -V
  2. 创建 sftp 用户
    Linux 系统内已存在的用户,都是可以直接使用 sftp 服务,创建用户是为了一些特殊的场景使用,做一些区分,将 my-sftp 用户的登录 shell 指定为 /sbin/nologin ,不让 my-sftp 用户可以通过 ssh 命令登录到服务器
    1
    useradd my-sftp -s /sbin/nologin
    useradd
    为 for-sftp 用户设置密码
    1
    echo passwd| passwd --stdin my-sftp
    password
  3. 修改ssh配置
    1
    vi /etc/ssh/sshd_config
    internal-sftp
    配置了 ChrootDirectory 时,sftp 对于 ChrootDirectory 目录的权限要求比较死
    不允许 ChrootDirectory 的属组有写入权限,也就是最高只支持 750 和 755 两种权限
    ChrootDirectory 的属主必须是 root 用户
    不满足以上两种条件时,用 my-sftp 用户登录 sftp 会报错:
    packet_write_wait: Connection to <ip地址> port 22: Broken pipe
    Couldn’t read packet: Connection reset by peer
    命令含义如下:
1
2
3
4
Subsystem sftp internal-sftp  #指定使用sftp服务使用系统自带的internal-sftp 
Match user sftpuser #匹配用户,如果要匹配多个组,多个组之间用逗号分割
ChrootDirectory /data/sftp #设定属于用户组sftp的用户访问的根文件夹如设置 /data/sftp 作为sftpuser 的sftp根目录
ForceCommand internal-sftp #指定sftp命令,强制执行内部sftp,并忽略任何 ~/.ssh/rc文件中的命令
  1. 重启ssh服务
    1
    systemctl restart sshd
  2. 创建 ChrootDirectory
    • -m 750 - 指定目录创建时的权限
    • -m 只会指定创建时的最后一级目录,不影响前面的父级目录
    • -p - 父级目录不存在时,创建父级目录
    • 要给 ChrootDirectory 配置一个 for-sftp 组的权限,否则 for-sftp 用户也没权限进入到自己有权限的路径下搞事情
      1
      2
      3
      4
      mkdir /data/sftp -m 750 -p
      chown root.my-sftp /data/sftp
      mkdir /data/sftp/my-sftp
      chown my-sftp.my-sftp /data/sftp/my-sftp

chroot

  1. 测试sftp

test

注意,如果上传的目录是暴露的nginx http 服务, 需要将nginx 加入到创建sftp用户组内才能正常访问

1
2
gpasswd -a nginx my-sftp