生成密钥
使用ssh-keygen生成密钥
ssh-keygen -t rsa
直接回车默认即可,你要设置密码也行到时候连接的时候就需要密钥+你设置的密钥才能连接。也可以修改密钥类型和位数等,自行搜索ssh-keygen语法类型了解。
[root@monster ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:N+MF5Jbwo8m/JA2ZXDtkaz6c+my6kKCOfdS7/FN0PhE root@monster
The key's randomart image is:
+---[RSA 2048]----+
| . . |
| = .E |
| @ . |
| o X.=o |
| .. S.Oo.. |
| ..... X.*o |
| .. o...X . |
| + .....=.o |
|. o. oo=*+ |
+----[SHA256]-----+
[root@monster ~]#
生成的密钥默认在/root/.ssh目录下,id_rsa(私钥)id_rsa.pub(公钥)
[root@monster ~]# cd /root/.ssh
[root@monster .ssh]# ls
id_rsa id_rsa.pub
[root@monster .ssh]#
将公钥id_rsa.pub复制或上传到你需要被连接的服务器,私钥id_rsa自己保留用来连接。
这里我不需要复制到其它服务器,就用当前云服务器操作(生产密钥任何服务器都行,不需要说哪台服务器需要用到就用哪台服务器去生成,包括现在很多客户端软件都支持一键生成密钥。)
将公钥写入authorized_keys文件,统一是在ssh目录下
[root@monster .ssh]# cat id_rsa.pub >> authorized_keys
[root@monster .ssh]# pwd
/root/.ssh
[root@monster .ssh]# ls
authorized_keys id_rsa id_rsa.pub
[root@monster .ssh]#
使用私钥登录
将私钥id_rsa下载到我们电脑上
我这里是MAC使用的Termius工具连接,设置你的服务器地址,ssh端口和用户名、上传我们的私钥或者复制私钥里面的内容复制出来粘贴。
各类客户端连接大同小异
保存连接测试,OK直接连进来了不需要输入密码
禁用密码和root账户登录
上面使用密钥可以正常登录了,但是现在也可以直接用账号密码登录服务器
禁用密码登录需要修改/etc/ssh/sshd_config 配置文件
vi /etc/ssh/sshd_config
找到PasswordAuthentication参数把yes改成no,即禁止使用密码登录服务器。
重启ssh服务
[root@monster ~]# systemctl restart sshd
原来使用密码的方式就登录不了服务器了
还有一个参数可以设置,那就是PermitRootLogin,此设置只针对root用户
将参数设置成prohibit-password,可以使用密钥登录命令权限也还在,
参数 | ssh登录 | 登录方式 | shell |
---|---|---|---|
yes | 允许 | 没有限制 | 没有限制 |
prohibit-password/without-password(已弃用,但也能生效) | 允许 | 除密码以外 | 没有限制 |
forced-commands-only | 允许 | 密钥 | 仅允许已授权的命令 |
no | 拒绝 |
PasswordAuthentication和PermitRootLogin区别
PasswordAuthentications:如果为no,则必须使用其他的身份验证方式,如公钥身份验证。
PermitRootLogin: 设置为 no 表示 不允许 root 用户远程访问。设置为 yes 表示允许 root 用户远程访问。设置为 prohibit-password 表示 不允许 root用户使用密码远程访问,但是可以用其他方式访问,比如密钥。
评论区