机器直接接入公网后,如果保留默认的密码登录访问会存在被别人“撬锁”的风险,特别是root用户,虽然不一定能撬开,但我不想让别人惦记着自己家门,重装了一台centos的主机随手就把密码登录关掉,就感觉很舒适 :>
注:本文适用于CentOS版本7.4以上、OpenSSH_8.0p1以上,且下面以root用户为例
step1:
重装完系统后先生成ssh密钥,因为一般linux发行版自带openssh,所以在新装好的系统上直接`
ssh-keygen -t rsa -b 4096 -C "your comment"
参数介绍:
-t(type) ,加密算法,可选rsa(默认)/dsa, 所以如果用rsa其实上面-t rsa不用指定
-b(bit),密钥长度,rsa默认2048,dsa固定1024
-C(comment),描述,随便写,常见写自己的邮箱,好认、嗯
紧接着,提示你填写一些东西,比如文件名啊、密码啊(密钥也是有密码的,登的时候不仅要文件,还要密码,一般为了方便都不设这个,前提是保管好你的密钥文件!),所以你愿意的话(反正我经常就是)Enter,Enter,Enter…
step2:
进入相应的目录/root/.ssh/,可以看到目录下文件authorized_keys内容空空如也,所以要把公钥文件(就是后缀.pub的那个)中的内容写到里面去:
cd /root/.ssh/
cat id_rsa.pub >> authorized_keys
step3:
修改ssh配置文件
vi /etc/ssh/sshd_config
找到并修改以下一条以开启密钥登录
PubkeyAuthentication yes
找到并修改以下两条以关闭密码登录
PermitEmptyPasswords no
PasswordAuthentication no
如果你的机器仅能通过SSH访问,例如你的是云主机,那么还是建议先成功通过ssh密钥登录成功后,再放心的关掉ssh密码登录
保存并重启ssh以使配置生效:
systemctl restart sshd
step4:
将目录/root/.ssh/下的私钥,也就是没有后缀(.pub)的那个,搞到你的另一台设备上测试是否能登录:
例如本人在windows的shell下:
ssh -i C:/Users/xxx/Desktop/id_rsa root@xxx.xx.xx.xxx -p 22
-i 指定私钥文件即文件路径
-p 指定端口,默认就是22 不用指定,ps:修改一下ssh的端口更安全,具体改法请详读sshd_config配置文件。
如果没有什么异常提示,并成功登录主机(密钥没有设置密码的话,则直接会登录主机),那么就成功了。注意执行该命令如果找不到私钥文件,则ssh会转而通过密码方式登录,注意这一点。
令外,如果你通过一些花花绿绿的shell软件登录的话,请仔细参照相应软件的说明,选择好你的私钥文件即可。
多说一些:
centos7以上使用systemctl restart sshd重启ssh服务,而不是systemctl restart ssh。
网上很多对于修改sshd_config内容的说法不一,原因来自于各发行版Linux支持的ssh协议版本的不同,本文中为例的ssh为第二代协议版。而有些linux发行版中可能同时兼容ssh的新旧版。但CentOS7.4+是完全摒弃了ssh一代协议,这也是本文仅适用于CentOS7.4+的原因。
参考:https://en.wikipedia.org/wiki/SSH_(Secure_Shell)