Centos已经用了很多了,有时候登录还是密码登录,仅以此文记录下修改服务器ssh证书登录和开启服务器sftp服务的过程,加深记忆。
服务器开启SSH证书登录和修改ssh端口
首先是使用命令生成一对RSA公钥和私钥,公钥上传到服务器,私钥本地登录使用。
1
ssh-keygen -t rsa -C "lc-server"
将xxx.pub改名(或拷贝、添加到)~/.ssh/authorized_keys文件
1
cp lc-server.pub .ssh/lc-server.pub
- 修改xxx.pub文件权限为0600
1
chmod 600 lc-server.pub
- 修改/etc/ssh/sshd_config文件,然后重启sshd服务,如果是root用证书,则第一行是必须的,同时为了禁止密码登录服务器可以把第三个yes改为no,当然这需要使用证书登录成功之后修改。
1
systemctl restart sshd
- 私钥的格式问题:
如果是putty使用证书登陆,需要将私钥id_rsa文件格式转为ppk格式,使用putty提供的puttygen.exe,使用load加载本地私钥文件,然后使用save 保存为putty的ppk格式的私钥。 - 使用putty登录:
服务器开启SFTP服务
- 检查 openssh 版本–如果需要使用 ChrootDirectory 参数配置用户访问的默认路径,openssh 的版本不能低于 4.8
1
ssh -V
- 创建 sftp 用户
Linux 系统内已存在的用户,都是可以直接使用 sftp 服务,创建用户是为了一些特殊的场景使用,做一些区分,将 my-sftp 用户的登录 shell 指定为 /sbin/nologin ,不让 my-sftp 用户可以通过 ssh 命令登录到服务器1
useradd my-sftp -s /sbin/nologin
为 for-sftp 用户设置密码1
echo passwd| passwd --stdin my-sftp
- 修改ssh配置
1
vi /etc/ssh/sshd_config
配置了 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 | Subsystem sftp internal-sftp #指定使用sftp服务使用系统自带的internal-sftp |
- 重启ssh服务
1
systemctl restart sshd
创建 ChrootDirectory
- -m 750 - 指定目录创建时的权限
- -m 只会指定创建时的最后一级目录,不影响前面的父级目录
- -p - 父级目录不存在时,创建父级目录
- 要给 ChrootDirectory 配置一个 for-sftp 组的权限,否则 for-sftp 用户也没权限进入到自己有权限的路径下搞事情
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
测试sftp