平时我们远程管理 centos 主机使用 putty 工具, 也不需要用到证书登录, 但是当与客户传输(sftp协议)资料时,可能需要用到证书登录
本文介绍如何搭建一台 sshd 服务器以及用户通过证书登录 sshd 服务
环境
[root@localhost ~]# cat /proc/version
Linux version 3.10.0-123.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Mon Jun 30 12:09:22 UTC 2014
[root@localhost ~]# ssh -V
OpenSSH_6.4p1, OpenSSL 1.0.1e-fips 11 Feb 2013
第1步,生成 ssh 证书
在 client 端生成证书, 最终把公钥放到 server 端
建立RSA类型,长度为2048的证书,文件名为: rsa_2048_181205
# ssh-keygen -t rsa -b 2048 -f rsa_2048_181205
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in rsa_2048_181205.
Your public key has been saved in rsa_2048_181205.pub.
The key fingerprint is:
45:c1:04:a9:b6:74:5f:ef:d5:47:1b:04:f7:43:5f:a3 root@localhost.localdomain
The key 's randomart image is:
+--[ RSA 2048]----+
| . +. .+.|
| . . .=|
| . . ..o|
| 此处有马赛克 .o|
| o S. . . .+|
| . . ..+|
| . ..|
| . |
| |
+-----------------+
带.pub 的是公钥, 另一个是私钥
# ls rsa_2048_*
rsa_2048_181205 rsa_2048_181205.pub
第2步, 建立账号和群组
在 server 端建立账号
建立群组
# groupadd sftp
建立账号
# useradd -G sftp sftp01
设置密码
# passwd sftp01
Changing password for user sftp01.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
建立证书存放目录
# mkdir /home/sftp01/.ssh
修改目录 owner
# chown sftp01:sftp /home/sftp01/.ssh
设置权限
# chmod -R 755 /home/sftp01/.ssh
将client 端的公钥 rsa_2048_181205.pub 拷贝到 server 端的 .ssh 目录下命名 authorized_keys
设置文件 owner
# chown sftp01:sftp /home/sftp01/.ssh/authorized_keys
设置文件权限,sshd服务有安全验证,此文件权限太大会导致用户不能访问(重要)
# chmod 600 /home/sftp01/.ssh/authorized_keys
第3步, 配置 sshd 服务
启用 RSA验证和 public key 验证, 配置 public key 文件存放位置
# vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
确认开启了以上3项, 如果没有就添加, 如果想关闭密码验证功能就多改以下这一行:
PasswordAuthentication no
重启服务
# systemctl restart sshd
在 client 端进行测试, 指定私钥路径, 输入私钥密码, 出现 sftp> 表示已经成功登录 sftp
# sftp -oIdentityFile=./rsa_2048_181205 -oPort=22 sftp01@192.168.1.102
Enter passphrase for key './rsa_2048_181205':
Connected to 10.134.147.162.
sftp>
到此, 已经可以在 centos 下使用私钥登录 sftp 了, sftp 服务目录权限配置的部分在此略过.
>windows下使用 putty + 密钥登录 ssh
在 putty 界面中选择私钥
然后在 Session 界面中填入 HostName 和 Port, 点击 Open 按钮
报错了: 无法使用这个私钥
原因: 这套密钥是我们在 linux 下用 ssh-genkey 建立的, putty 命令以及 WinSCP 等软件不支持这种密钥格式.
解决办法: 使用 putty 安装版自带的 puttygen.exe, 转换一下格式
点击 Load 按钮, 选中私钥文件
输入私钥密码
提示这个 ssh-2私钥需要转换为 putty 格式的私钥才能使用
点击保存私钥按钮, 另存为 rsa_2048_181205.ppk ,之前的私钥是没有扩展名的
再用 putty 使用新的私钥进行连接
输入账号 sftp01, 再输入私钥密码.
到此, 使用 putty 免密成功登录到 ssh 了. WinSCP软件登录方同基本相同, 操作步骤省略.
如果使用FreeSSHd 软件搭建 sftp 服务,也需要转换证书.