CentOS 7 ssh远程登录停用密码认证,使用密钥认证

这休假和上班没什么区别啊,电话不断。
忙里偷闲,记录一下如何不用密码,用自己生成的密钥ssh登录服务器。

一、密钥生成
密钥分为公钥和私钥,公钥传到服务器上,私钥自己留着,私钥可以加密码。
但是,如果私钥加了密码,每次登陆时均需要输入密钥密码。
密钥类型建议从RSA、ECDSA、ED25519选择,长度256起步看需求。

以Xshell为例,上方菜单的工具,新建用户密钥生成向导。
全程都是中文提示,到“请输入给用户密钥加密的密码”,认证考虑要不要设置密码。
设置密码更安全,但是每次连接不输入服务器用户的密码,输入密钥的密码。
不设置的话,每次登录更方便,但是安全性就降低了。

新建密钥后,公钥、私钥的保存。可以Xshell菜单的工具,用户密钥管理者,进行管理。
公钥:选中密钥,右边的属性,公钥,保存为文件。
私钥:选中密钥,右边的导出。

二、ssh的配置更改

mkdir /home/clowlido/.ssh

在clowlido用户目录下新建一个.ssh文件夹

cd /home/clowlido/.ssh

进入.ssh文件夹

通过rz或xftp将公钥传到服务器上

mv ./clowlido.com.pub ./authorized_keys
chown clowlido:clowlido ./authorized_keys
chmod 600 ./authorized_keys

修改ssh设置,开放公钥认证

vi /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys
ChallengeResponseAuthentication no
systemctl restart sshd

先测试一下,是否可以使用密钥登录。

测试通过后,禁用密码认证,以后就只用密钥登录了。

vi /etc/ssh/sshd_config
PasswordAuthentication no
systemctl restart sshd

CentOS 7创建新用户及ssh安全登录配置

一、新建一个用于ssh登录的用户

adduser clowlido

创建新用户clowlido。

passwd clowlido

为clowlido设置密码。

二、限制可以切换到root的用户
仅允许wheel组的用户切换到root。

vi /etc/pam.d/su
auth required pam_wheel.so use_uid

去掉上面这行前面的#。

vi /etc/login.defs
SU_WHEEL_ONLY yes

在文末添加这行。

gpasswd -a clowlido wheel

把新用户clowlido加入wheel组。

lid -g wheel

查询所有wheel组的用户。

到这里可以从root下,切换到clowlido,然后测试sudo和su -l是否正常。

su clowlido

切换到新建的clowlido用户

sudo ls

测试sudo是否有效,输入root密码后,如果执行了ls,为正常。

su -l

切换到root,输入root密码后,切换root的login shell,为正常。

三、配置ssh使用自定义端口
目标是要禁止root及其他用户远程登录,但是首先要确定使用新建的clowlido用户可以通过ssh登录。
如果你没测试就禁用了root,之后发现所有用户都无法登录,就太欢乐了。
VPS还好,有Console或VNC。实体机只能跑去机房本地操作。

断开现有ssh连接或新建连接,确认clowlido可以通过ssh登录。

su -l

登录后切换到root继续操作。

vi /etc/ssh/sshd_config

修改ssh协议版本和端口号。

Protocol 2

使用sshv2协议。

Port 20001

修改ssh端口为20001。

firewall-cmd --permanent --zone=public --add-port=20001/tcp

防火墙开放新ssh端口20001。

firewall-cmd --reload

防火墙重载,使配置生效。

systemctl restart sshd

重启sshd服务。

确认clowlido可以ssh新端口20001登录。登录后切换到root继续操作。

su -l

关闭原来ssh默认的22端口。

firewall-cmd --list-ports

查看是否开启了22端口。

firewall-cmd --permanent --remove-port=22/tcp

如果看到22的话,移除端口。

如果没有看到22的话,估计是开放的服务。

firewall-cmd --list-services

查看firewall开放的服务。
看到ssh的话,就确认是服务了。

vi /usr/lib/firewalld/services/ssh.xml

修改firewalld的ssh.xml。

<port protocol="tcp" port="20001"/>

将端口改为新端口20001。

firewall-cmd --permanent --zone=public --remove-port=20001/tcp

因为使用服务,所以把之前添加的端口移除。

firewall-cmd --reload

防火墙重载,使配置生效。

接下来对登录用户进行限制。

vi /etc/ssh/sshd_config

增加下面两条。

PermitRootLogin no

禁止root远程登录,VPS控制台或本地可以登录。

AllowUsers clowlido

放最后即可,仅允许clowlido用户登录。

systemctl restart sshd

重启sshD服务。
结束。