ssh设置:免密登入、修改默认端口、禁止root登入、限制错误登入次数,安全模式强制修改root密码

服务器:

客户端:

 在下面不再说明服务器和客户端。

1.修改ssh默认端口

是在服务器中设置。

该设置涉及三部分:sshd配置文件修改/增加新端口、Selinux添加新端口、Firewall开放新端口。

vim /etc/ssh/sshd.config,找到#Port行, 默认Port策略是22号,取消注释就可以修改端口值,也可以保留22号端口,再添加一行写其他端口。添加的端口号建议在10000-65535之间,防止和系统端口冲突。例如,我们保留端口22号的同时添加32222端口。如果需要将22端口修改为32222,只需要将22端口注释即可。

 当修改完之后需要重启服务:systemctl restart sshd
查看sshd的状态:发现错误信息,端口32222是没有许可的

原因是:Selinux并不知道ssh的端口出现了改变, 可以使用semanage工具对Selinux进行设置。
查询系统是否有该工具,如果没有安装则进行安装。

查看当前端口,可以使用ss(等于netstat),我们使用semanage port -l命令

那我们将ssh的新端口添加进去

 此时还未生效,我们需要重启sshd服务使得新端口生效。

以修改之后的端口进行远程登入,如果没有指定用户名,则表示使用与当前本地用户相同的用户名登录远程服务器servera。

出现错误,no route to host,原因是:防火墙的对应端口32222没打开
防火墙端口查看和设置如下

 上述,就完成了添加一个ssh端口登入的操作:

如果,我们仅仅想修改掉默认端口22为32222,那我们在/etc/ssh/sshd.config配置文件中删除22端口这一行即可。并且重启,可以看到sshd进程只运行在新端口上了。

现在只能新端口登入了,默认端口已经不能登入。

防火墙和Selinux去掉加入的端口:


2.禁止root登入和限制密码试错的最大次数

是在服务器中设置。

修改/etc/ssh/sshd.config文件中的以下位置
OpenSSH服务器使用/etc/ssh/sshd_config配置文件中的PermitRootLoain配置设置,以允许或禁止用户以root身份登录系统。当PermitRootLogin参数设为yes时,这也是默认设置,用户被允许以root身份登录系统。要防止这种情况,可将该值设为no。或者,若要禁止基干密码的身份验证,但允许对root执行基于私钥的身份验证,可将PermitRootLogin参数设为without-password。
OpenSSH服务器使用/etc/ssh/sshd_config配置文件中的PasswordAuthentication参数,用于控制用户在登录系统时能否使用基于密码的身份验证。Password Authentication参数的默认值是yes,这会使SSH服务器允许用户在登录系统时使用基于密码的身份验证。PasswordAuthentication的值为no时禁止用户使用基于密码的身份验证。
请记住,每当您更改/etc/ssh/sshd_config文件时,都必须重新加载sshd服务让更改生效,即systemctl reload sshd。
请记住,如果您为ssh关闭基于密码的身份验证,则需要有一种办法来确保用户在远程服务器上的
~/.ssh/authorized_keys文件中填充有公钥,以便可以登录。


 3.免密登入

客户端ssh登入服务器的形式一般来说是交互式的,需要输入密码;这对于脚本执行很不友好。有时候脚本执行需要免密直接登入不同的服务器,那么免密设置就非常有必要了。

客户端root用户目录中的/root/.ssh文件夹,在无任何ssh远程登入服务器的时候是空的。使用ssh登入服务器,就会提示连接后会将服务器的指纹永久的加入known_hosts文件中。因此我们从该文件就可以看出,客户端曾连过多少台服务器。并且我们可以知道,这种方式登入,不管登入几次都是需要交互式的输入服务器账号对应的密码登入。

客户端中known_hosts文件的公钥信息来自于服务器中/etc/ssh/ssh_host_*.pub文件。例如上面公钥信息ecdsa加密方式,那么对应的就是服务器的ssh_host_ecdsa_key.pub文件,如下图

 

基于密钥的身份,甚至免密登入:

/etc/ssh/目录下面的密钥对,是系统自动生成提供给客户端登入的。/root/.ssh/目录下面的密钥对是用户自己手动生成的,目的是为了基于密钥的身份,甚至免密登入。

客户端执行密钥生成命令:ssh-keygen -t rsa,我们选择默认的存储位置,可以选择密钥的密码(也可以不设置直接回车),生成rsa加密方式的密钥对,默认保存在/root/.ssh/文件夹中,公钥文件以pub结尾。

首先查看服务器用户目录下面的.ssh文件夹,可以看到文件夹内没有authorized文件

我们在客户端中执行命令:ssh-copy-id root@servera
在可以使用基于密钥的身份验证之前,需要将公钥复制到服务器(目标系统)上。ssh-copy-id命令可将 SSH密钥对的公钥复制到目标系统。如果在运行ssh-copy-id时省略了公钥文件的路径,它会使用默认的/home/user/.ssh/id_rsa.pub文件。这里我们是省略了指定公钥文件的路径。

这个时候我们就可以基于密钥的身份登入服务器ssh servera,我们还是需要交互式的输入自己创建密钥对时设置的密码。注意,这里发生了本质区别,以前登入需要输入服务器端的用户密码,密码由服务器拥有者可以随意改动;现在登入需要输入的是客户端拥有者的密钥密码,由自己控制。
将公钥成功传输到远程系统后,我们可以使用对应的私钥对远程系统进行身份验证,同时通过SSH登录远程系统。如果在运行ssh命令时省略了私钥文件的路径,它会使用默认的/home/user/.ssh/id_rsa文件。这里我们省略了指定私钥文件的路径。

如果我们要达到真正的免密(免客户端自己的密钥密码)有两种方式:
方式一,创建密钥对的时候不设置密钥密码,这样在登入的时候也不会出现交互式的让我们输入密钥密码。但是有安全问题,在这种情况下,任何拥有您私钼文件的人都可以使用它进行服务器的身份验证,如果您设置了密码,则在使用私钥进行身份验证时需要输入此密语。
方式二,已经设置了密钥密码,通常必须输入密语才能使用私钥进行身份验证。但是,我们可以使用名为ssh-agent的程序临时将密语缓存到内存中。之后,当我们使用SSH通过私钥登录另一个系统时,ssh-agent会自动为我们提供密码。这样做不仅方便,而且能减少他人“肩窥”您密码输入的机会,从而提高安全性。

方式二具体操作
运行eval $(ssh-agent)命令,将启动ssh-agent并自动为该shell会话设置这些环境变量。此外,它还显示ssh-agent进程的PID。
一旦ssh-agent开始运行,我们需要告诉它私钥密语或密钥。运行ssh-add命令会添加分别来自/home/user/.ssh/id_rsa(默认)文件的私钥。。如果我们使用的是默认文件之外的私钥文件,必须将-i 选项用于ssh命令来指定私钥文件的路径。
当我们注销启动了ssh-agent的会话时,将退出进程,并且您的私钥密语也将从内存中清除。

4.安全模式强制修改root密码

 有时候root密码忘记了,这个时候我们需要强制修改root密码。该方式适合能调整linux系统的启动界面。

#重启linux系统后进入开机菜单,光标移至第一个选项后(一般选第一个内核),敲击键盘 e 键:

#在倒数第二行结尾处输入 rd.break console=tty0


#按 ctrl+x 继续启动。
#这个时候就进入了紧急模式emergency mode,在该界面下,输入如下命令

mount -o rw,remount /sysroot  #重新挂在sysroot目录
chroot /sysroot  #切换到sysroot环境
echo "redhat" | passwd --stdin root  #直接更改root密码为redhat,echo root:redhat|chpasswd
touch /.autorelabel  #新建autorelabel文件,用来重新建立标签文件
exit  #退出sysroot环境
exit #退出emergence模式,进入系统重启

#重启之后root就可以使用新密码redhat登入



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 限制用户登入的会话限制3分钟自动注销: 在修改配置文件前,先备份原文件: ``` sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak ``` 使用编辑器打开配置文件: ``` sudo vim /etc/ssh/sshd_config ``` 找到并修改下列两行: ``` ClientAliveInterval 180 ClientAliveCountMax 0 ``` 将 `ClientAliveCountMax` 的值改为 0 表示永不断开连接,将 `ClientAliveInterval` 的值改为 180 表示每 180 秒(3 分钟)发送一次心跳包。 重启 sshd 服务: ``` sudo systemctl restart sshd ``` 2. 限制用户最大登入数量为 6: 在修改配置文件前,先备份原文件: ``` sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak ``` 使用编辑器打开配置文件: ``` sudo vim /etc/ssh/sshd_config ``` 找到并修改下列一行: ``` MaxSessions 6 ``` 将该行的值改为 6,表示最多允许 6 个会话。 重启 sshd 服务: ``` sudo systemctl restart sshd ``` 3. 创建 demo 和 test 用户,拒绝 demo 用户 SSH 访问,允许 test 用户 SSH 访问: 创建 demo 和 test 用户: ``` sudo useradd demo sudo useradd test ``` 设置 demo 用户无法 SSH 登录: ``` sudo vim /etc/ssh/sshd_config ``` 在文件末尾添加如下内容: ``` Match User demo ForceCommand /bin/false ``` 这里使用 `Match User` 指令匹配用户 demo,然后使用 `ForceCommand` 强制执行 `/bin/false` 命令,该命令不会执行任何操作,直接退出。 设置 test 用户可以 SSH 登录: ``` sudo vim /etc/ssh/sshd_config ``` 在文件末尾添加如下内容: ``` Match User test AllowUsers test ``` 这里使用 `Match User` 指令匹配用户 test,然后使用 `AllowUsers` 允许用户 test 登录。 重启 sshd 服务: ``` sudo systemctl restart sshd ``` 4. 禁止 root 登录: 在修改配置文件前,先备份原文件: ``` sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak ``` 使用编辑器打开配置文件: ``` sudo vim /etc/ssh/sshd_config ``` 找到并修改下列一行: ``` PermitRootLogin no ``` 将该行的值改为 `no`,表示禁止 root 用户 SSH 登录。 重启 sshd 服务: ``` sudo systemctl restart sshd ``` 5. 将默认的 22 端口更改为 2022: 在修改配置文件前,先备份原文件: ``` sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak ``` 使用编辑器打开配置文件: ``` sudo vim /etc/ssh/sshd_config ``` 找到并修改下列一行: ``` Port 2022 ``` 将该行的值改为 2022,表示使用 2022 端口进行 SSH 服务。 重启 sshd 服务: ``` sudo systemctl restart sshd ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值