Linux 修改默认端口、增加普通用户、使用密钥等安全登录SSH
阿里云、腾讯云等默认使用 root、22端口号、密码进行登录,这样很容易通过暴利破解密码。
本文在积累了大量安全Linux安全知识后,介绍如何修改默认端口号22、禁用root登录并增加普通用户来登录、摒弃密码登录并通过加密的密钥文件来登录,大大增强linux ssh登录的安全性。
本文实例的系统环境
阿里云 CentOS 7.4
一、修改SSH默认端口号22
米扑博客之前写过一篇博客:Linux 修改SSH 默认端口 22,防止被破解密码
1、修改配置文件
vim /etc/ssh/sshd_config
修改
#Port 22 #ListenAddress 0.0.0.0 #ListenAddress ::
为
Port 22 Port 23456 #ListenAddress 0.0.0.0 #ListenAddress ::
如上,取消注释 Port 22,并在其下方增加一行 Port 23456
这样通过 22 和 23456 两个端口号,都可以ssh登录linux服务器,以防止不可登录
2、使 sshd 配置生效
1)执行如下命令,使 sshd 配置修改后生效
systemctl restart sshd.service
2)生效后,使用新端口号登录
ssh root@47.106.126.167 -p 23456
# ssh root@47.106.126.167 -p 23456 root@47.106.126.167's password:
输入密码即可成功登录
注:此时 22 和 23456 两个端口都可以成功登录ssh
3)确认新端口可登录,注释掉22端口
vim /etc/ssh/sshd_config
注释掉端口22,最后的配置内容如下
#Port 22 Port 23456 #ListenAddress 0.0.0.0 #ListenAddress ::
最后,别忘了修改配置文件后,使其生效
systemctl restart sshd.service
二、增加普通用户,禁用root
1、增加普通用户 test
# useradd test # passwd test Changing password for user test. New password: Retype new password: passwd: all authentication tokens updated successfully.
通过命令 useradd test,增加了普通用户名 test (可以修改为你自己喜欢的登录用户名)
通过命令 passwd test,为用户名 test 设置登录的密码
2、通过普通用户登录
使用新增加的用户名 test 及其密码登录linux服务器
ssh test@47.95.201.113 -p 23456
$ ssh test@47.95.201.113 -p 23456 test@47.95.201.113's password: Welcome to Alibaba Cloud Elastic Compute Service ! [test@mimvp-bj ~]$
3、普通用户添加到 sudoers
普通用户 test 切换到 root 超级用户,默认是不允许的,会报错如下:
$ sudo -s
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for test:
test is not in the sudoers file. This incident will be reported.
因此,根据错误提示,需要把普通用户 test 添加到 sudoers 文件里
米扑博客之前介绍了相关配置的博客:Linux sudo 免密码输入 和 Linux ssh 切换登录用户自动转到root用户
下面直接给出详细的配置步骤:
1)修改文件权限,拥有编辑文件写的权限
chmod u+w /etc/sudoers
2)编辑文件 /etc/sudoers
vim /etc/sudoers
在root ALL=(ALL) ALL 下添加一行 test ALL=(ALL) NOPASSWD:ALL
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
test ALL=(ALL) NOPASSWD:ALL # test为你的用户名
3)改回sudoers文件的原权限
chmod u-w /etc/sudoers
4、普通用户登录后自动切换到root超级用户
1)用户用户登录后,修改配置文件
ssh test@47.95.201.113 -p 23456
$ ssh test@47.95.201.113 -p 23456 test@47.95.201.113's password: Last login: Sat Oct 13 22:12:42 2018 from 106.39.151.17 Welcome to Alibaba Cloud Elastic Compute Service !
普通用户登录后,修改当前用户(test)目录下的 .bash_profile 文件
vim /home/test/.bash_profile
在该配置文件中修改两处:
a)添加一行
sudo su root
b)修改一行
PATH=$PATH:$HOME/.local/bin:$HOME/bin
为
PATH=$PATH:$HOME/bin
修改后的 /home/test/.bash_profile 配置文件:
# /home/test/.bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi sudo su root # User specific environment and startup programs #PATH=$PATH:$HOME/.local/bin:$HOME/bin PATH=$PATH:$HOME/bin export PATH
使用 SecureCRT连接工具,不用重启,重新登录,即可切换到了 root (米扑验证成功)
若本机需要生效,需要重启服务器,使修改生效
配置test和root登录文件
##### 1. 修改 /etc/profile,新增最后三行 ##### alias ll='ls -al --color=auto' echo "/etc/profile +++ whoami 111 =" `whoami` ##### 2. 修改 /etc/bashrc,新增最后三行 ##### if [ `whoami` == 'root' ]; then echo "" fi echo "/etc/bashrc +++ whoami 111 =" `whoami` ##### 3. 修改 /home/test/.bash_profile,新增最后三行 ##### # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/.local/bin:$HOME/bin export PATH #source /etc/profile echo "test /home/test/.bash_profile +++ whoami 111 =" `whoami` echo "test /home/test/.bash_profile +++ sudo su root" sudo su root ##### 4. 修改 /root/.bash_profile, 新增两行 ##### # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi echo "root /root/.bash_profile +++ whoami 111 =" `whoami` echo "" # User specific environment and startup programs ##### 5. 修改 /home/test/.bashrc,新增最后一行 ##### # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and functions echo "test /home/test/.bashrc +++ whoami 111 =" `whoami` ##### 6. 修改 /root/.bashrc,新增最后一行 ##### # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi echo "root /root/.bashrc +++ whoami 111 =" `whoami`
2)验证普通用户登录自动切换到root
首先,普通用户先退出登录
然后,普通用户再次登录
ssh test@47.95.201.113 -p 23456
$ ssh test@47.95.201.113 -p 23456 test@47.95.201.113's password: Last login: Sat Oct 13 22:40:12 2018 from 106.39.151.17 Welcome to Alibaba Cloud Elastic Compute Service ! [root@mimvp-bj test]#
上面登录记录,可以看到最后一行自动切换到了 root ([root@mimvp-bj test]#)
3)禁用 root 登录
在上面的步骤2)中,确认通过普通用户 test 可以自动切换到 root 超级用户后,就可以禁用 root 登录了
a)修改配置文件
vim /etc/ssh/sshd_config
b)找到 "PermitRootLogin" 关键字,修改
PermitRootLogin yes
为
PermitRootLogin no
修改后的配置文件(片段)可以为:
UseDNS no
AddressFamily inet
#PermitRootLogin yes
PermitRootLogin no
c)使修改配置后生效
systemctl restart sshd.service
d)验证 root 已经禁用,无法登录
$ ssh root@47.95.201.113 -p 23456
root@47.95.201.113's password:
Permission denied, please try again.
三、加密密钥代替密码登录
通过 openssl ssh-keygen来生成 rsa 私钥和公钥来进行授权登录
1、普通用户 test 登录到 linux 服务器,并切回普通用户
ssh test@47.95.201.113 -p 23456
$ ssh test@47.95.201.113 -p 23456 test@47.95.201.113's password: Last login: Sun Oct 14 00:01:49 2018 from 106.39.151.17 Welcome to Alibaba Cloud Elastic Compute Service ! [root@mimvp-bj test]# exit [test@mimvp-bj ~]$
经过上文,普通用户 test 用户登录后,默认会切换到root超级用户
因为我们已经禁用了root登录,并要用普通用户 test 登录,因此需切换到普通用户 test (Ctrl + D)
2、确认已安装 openssl
[test@mimvp-bj ~]$ openssl -V
若返回一大推字符串算法,表示已安装 openssl
若提示找不到,则需要安装 openssl
yum install openssl -y
3、生成rsa密钥文件
进入普通用户的当前目录下
cd ~
执行命令 ssh-keygen
根据提示,输入生成rsa的密码(使用密钥文件时需输入的密钥,增强安全性)
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/test/.ssh/id_rsa): Created directory '/home/test/.ssh'. Enter passphrase (empty for no passphrase): # 设置密钥文件的密码 Enter same passphrase again: # 重复一次设置密钥文件的密码 Your identification has been saved in /home/test/.ssh/id_rsa. Your public key has been saved in /home/test/.ssh/id_rsa.pub. The key fingerprint is: SHA256:9PH7wK+eReWcuIfm0fTbyswGdqctos3PlrY+w9d0RAg test@mimvp-bj The key's randomart image is: +---[RSA 2048]----+ | E. . | | . .| | . . ..| | . . o .+o| | S . ...+o| | .oo* =| | .+O.O+| | o+@& *| | .o*X%O.| +----[SHA256]-----+
4、配置服务器公钥
生成rsa密匙对后,在服务器上面配置一下才能使用:
a)进入 ~/.ssh
cd ~/.ssh/
b)查看rsa密钥文件
$ ls
id_rsa id_rsa.pub
c)把公钥文件授权
cp id_rsa.pub authorized_keys
再查看当前文件
$ ls -a
. .. authorized_keys id_rsa id_rsa.pub
d)授权密钥文件和目录
chmod 600 authorized_keys
chmod 700 ~/.ssh
# 然后修改密匙文件的权限,避免被其他用户修改/删除。
# chmod 600 - 只有属主有读写权限。
# chmod 700 - 只有属主有读、写、执行权限。
查看文件的权限
$ ls -l authorized_keys
-rw------- 1 test test 397 Oct 14 00:35 authorized_keys
$ ls -al ~
drwx------ 2 test test 4096 Oct 14 00:35 .ssh
5、配置SSH使用密钥登录
sudo vim /etc/ssh/sshd_config
找到关键字"PubkeyAuthentication",取消注释
#PubkeyAuthentication yes
PubkeyAuthentication yes
说明:经测试,取不取消注释默认都支持私钥登录,若禁用密钥登录需改成 PubkeyAuthentication no
使配置文件生效
sudo systemctl restart sshd
到此,服务器端配置完成。
6、客户端配置,并通过密钥文件连接登录服务器端
a)从服务器上,下载私钥文件到本地
sz ~/.ssh/id_rsa
b)SSH命令行通过私密文件登录服务器
sudo ssh -i id_rsa test@47.95.201.113 -p 23456
$ sudo ssh -i id_rsa test@47.95.201.113 -p 23456 Enter passphrase for key 'id_rsa': Last login: Sun Oct 14 00:51:29 2018 from 106.39.151.17 Welcome to Alibaba Cloud Elastic Compute Service ! [root@mimvp-bj test]#
如上,提示输入密钥文件的密钥,即步骤 3、生成rsa密钥文件时输入的密码,成功登录。
说明:若不想使用rsa密钥文件时输入密码,可以取消私钥密码,步骤如下:
首先,使用openssl命令去掉私钥的密码
openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa_new
# openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa_nopassword Enter pass phrase for id_rsa : # 输入私钥文件的密码 writing RSA key
接着,修改私钥文件的权限
chmod
600 ~/.
ssh
/id_rsa
然后,通过无密码的私钥文件登录
ssh -i ~/.ssh/id_rsa_nopassword test@47.95.201.113 -p 23456 # 不需要输入私钥的密码
# ssh -i ~/.ssh/id_rsa_nopassword test@47.95.201.113 -p 23456 Last login: Sun Oct 14 09:08:51 2018 from 47.106.126.167 Welcome to Alibaba Cloud Elastic Compute Service !
此值,通过加密的密钥文件+密码 和 无加密的密钥文件,都可以登录linux服务器
ssh -i ~/.ssh/id_rsa test@47.95.201.113 -p 23456 # 加密的密钥文件+密码
ssh -i ~/.ssh/id_rsa_nopassword test@47.95.201.113 -p 23456 # 不需要输入私钥的密码
c)SecureCRT 通过私密文件登录服务器
SSH2 —> Authentication选择"PublicKey"调到第一位后 —> 点击Properties...
不要使用全局公钥设置,选择右侧的只当前session适用,并导入私钥文件
然后,点击session登录,会自动弹出对话框,要求输入密钥文件的密码(与Shell命令登录时输入的一样)
至此,SecureCRT 通过私钥文件 + 私钥文件密钥登录linux服务器成功
这里,不要忘了,此时linux服务器有两种登录方式:
1)密码登录
2)密钥文件登录
若要禁用密码登录,修改配置文件
sudo vim /etc/ssh/sshd_config
找到关键字"PasswordAuthentication",修改此行
PasswordAuthentication yes
为
PasswordAuthentication no
这里特别要注意:即使注释掉了此行,默认还是允许密码登录的
若要禁用密码登录则一定要明确显式的修改成 PasswordAuthentication no,没有其它方法,切记!
使配置文件生效
sudo systemctl restart sshd
到此,就禁用了密码(PasswordAuthentication)登录,只保留了密钥(PubkeyAuthentication)登录方式
四、多服务器共享一个密钥
当有很多linux服务器,但是不想单独给每个服务器生成一个个单独的密匙,那么你可以多个服务器共用一个密匙。
在一台linux服务器生成含密码的rsa密钥文件,然后把公匙 ~/.ssh/id_rsa.pub 拷贝到其他的多台linux服务器上,在普通用用户目录下新建 .ssh
目录
mkdir ~/.ssh
然后,把公匙(~/.ssh/authorized_keys)通过 rz/sz 或 ftp 或 wget 等方式上传到其他服务器
在服务器上面读取公匙文件内容(~/authorized_keys),写入到 ~/.ssh/authorized_keys
cat ~/authorized_keys | echo -e > ~/.ssh/authorized_keys
接着,按照步骤三进行 SSH + 密钥文件 + 输入密钥文件密码 进行登录
五、总结
本文内容较多,主要是对linux登录做了多重安全性加强措施,确保服务器不被暴利破解。
1、修改了默认SSH端口22为随机端口号,如本文示例的23456端口号
2、禁用了root登录,新增加了普通用户(test)登录,可改成你自己喜欢的用户名
3、对普通用户,生成rsa密钥文件,并对密钥文件加密,通过加密的密钥文件来登录
4、禁用密码登录,只使用密钥文件 + 密钥文件密码登录,保管好密钥文件及其密码
经上步骤,几乎彻底禁用了 ssh root@ip -p 22 + 密码 这种传统登录方式
1、更改了默认端口22
2、禁用了用户名 root 登录
3、禁用了密码登录
4、改用成了 ssh -i id_rsa test@ip -p 23456 + 输入密钥文件密码 登录方式
随机端口号、禁用了root,禁用了密码,改用成普通用户+密钥文件,大大增强了服务器的安全性
参考推荐:
Linux ssh 切换登录用户自动转到root用户 (推荐)
Linux shell 脚本通过expect实现自动输入密码
Mac sudo: /etc/sudoers is owned by uid 501, should be 0
Linux之/etc/profile、~/.bash_profile等几个文件的执行过程
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2024-06-28 15:38:16
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!