SSH实现免密登录并设置黑白名单

时间:2024-03-09 21:12:21

简介

FTP、Telnet 在网络上通过明文传输口令和数据,这是非常不安全的,很容易受到其他别有用心的人的利用,比如截获你的口令,然后冒充你的数据。ssh通过对传输数据加密实现安全登录,而且ssh对传输数据进行加密,减小了传输时延。虽然ssh有一定的安全措施保护数据传输过程免受干扰,但如果登录的机器本身处于危险的环境中,也不免要受收到一些干扰,因此要对处于危险环境的IP做一些限制,也就是黑名单和白名单

环境:两台centos7服务器。192.168.92.133和192.168.92.137

目的:实现SSH登录

查看SSH服务

centos7默认安装了SSH,查看是否有SSH服务

rpm -qa|grep ssh

如果没有安装则安装一下

yum -y install openssh*

注意:如果操作过程中出现了问题,可以直接卸载,然后重新安装

yum remover -y openssh*

要确保登录与被登陆的两台机器都开启了SSH服务

首先查看SSH状态

systemctl status sshd.service

如果没有启动则启动SSH服务

systemctl start sshd.service

设置开机自启

systemctl enable sshd.service

一、ssh登录方式

1.不指定用户,使用默认的root账户登录

ssh 192.168.92.137

2.登录时指定用户

ssh –l root 192.168.92.137
或者
ssh root@192.168.92.137

3.SSH默认使用22端口登录,如果被登陆机器更改了端口号,则需要使用指定的端口登录

ssh –p 12580 192.168.92.137
ssh –l root –p 12580 192.168.92.137
ssh –p 12580 root@192.168.92.137

第一次登陆时会出现如下情况,会问你是否继续此连接,输入yes,然后提示你输入对方机器对应账号的密码,通过查看ip,发现已经登录上去了

需要退出登录的话,输入exit,可以查看IP地址验证是否退出

二、ssh实现免密登录

每次登录都需要输入密码挺麻烦的,如果有一种既安全又不用输密码的方式就方便许多了。这里就需要使用到公钥和私钥的知识了。

简单介绍一下。说到公钥和私钥,就要想到锁和钥匙的关系,公钥相当于锁,锁在大门上,任何人都可以看见。私钥相当于钥匙,只有有钥匙的人才能打开锁。锁和钥匙相当于验证身份的信物,只有用钥匙打开锁,我会认为是自己人,让你进来喝口茶,坐一坐。是不是整得还挺浪漫。

假如锁锁住的是宝物,并且还有人守护宝物,等待有缘人的到来。当然,守护者会去验证你的身份,验证身份的唯一标准就是是否能打开锁。当年藏宝的人把锁留下,肯定还有钥匙去开锁。本来只有一把钥匙,但为了怕丢了又配了一把,所以他本人有钥匙可以随时来看看,而另一把钥匙在他流浪江湖的时候给了一位有缘人,因此这位有缘人也可以通过验证打开锁,进而验证身份得到宝物。

说明

两台服务器:192.168.92.133和192.168.92.137

系统:centos7

目的:133服务器免密登录到137服务器root用户

在133服务器上,生成公钥和秘钥

ssh-keygen

首先提示你生成秘钥的路径,如果不输入路径则默认生成在当前用户家目录下的.ssh目录中,当前账户为root,所以生成的秘钥默认放在/root/.ssh/id_rsa

如果之前对应文件已经存在同名秘钥文件,则会提示你是否覆盖,如果该秘钥已用于连接其他服务器,则不要覆盖。以下为不存在同名文件,继续提示你为该秘钥设置密码,随后确认密码。设置密码后,每次使用秘钥都要输入密码。

这里我们没有输入密码,直接两个回车

 生成之后查看.ssh隐藏文件,id_rsa为私钥文件,id_rsa.pub为公钥文件

 因为我们要连接137服务器,因此要把公钥交给137服务器

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.92.137

其中会提示你输入137服务器的密码,往后不会再让你输入

 现在,就可以通过SSH免密登录到137服务器了

ssh root@192.168.92.137

 我们可以通过查看.ssh目录下的known_hosts文件查看已知的主机

cat /root/.ssh/know_hosts

三、禁止root登录

由于root用户具有超级权限,随意的使用root权限可能会带来一些隐患,因此我们需要禁止root用户登录,只开放普通用户登录,当需要root权限时,再切换到root用户

在137服务器中修改sshd_config文件

vim /etc/ssh/sshd_config

找到PermitRootlogin yes,去掉#,把yes改为no

 重启SSH服务

systemctl restart sshd.service

从133服务器登录到137服务器的root账户,可以看到已被拒绝登录

 登录普通用户tc,能够正常登录

四、更改默认端口号

为了安全考虑,我们还可以修改默认的端口号,减小被黑客攻击成功的风险

找到#Port 22,去掉注释,修改成一个五位的端口:Port 12333

 重启SSH服务

systemctl restart sshd.service

防火墙放行12233端口

firewall-cmd --permanent --add-port=12233/tcp

重启防火墙

firewall-cmd --reload

查看端口放行情况

firewall-cmd -–list-port

 可以看到已经能够通过修改后的端口登录了

五、设置SSH黑白名单

 SSH通过设置黑名单或白名单做某些限制,比如禁止通过某账号登录,或者禁止从某ip登录

1.限制或允许通过某账号登录

在137服务器/etc/ssh/sshd_config里添加

DenyUsers tc

 可以看到现在无法通过tc用户登录到137服务器,而root用户可以正常登录

 如果为AllowUsers tc,则为允许tc用户登录

AllowUsers tc

每次登录还需要输入用户名和ip,感觉比较麻烦,可以通过配置SSH快捷登录直接登录到linux服务器。

编辑当前用户家目录下的.ssh/config文件,如果没有则创建一个

touch config
vim config

添加如下信息

Host   alias  #自定义别名
HostName  hostname  #替换为你的ssh服务器ip
Port   port   #ssh服务器端口,默认22
User  user   #ssh服务器用户名
IdentityFile   ~/.ssh/id_rsa  #生成的公钥文件对应的私钥文件

 保存并退出

 可以看到直接通过ssh aliyun登录到135服务器了

2.允许通过某个ip登录

vim /etc/hosts.allow

可以编辑如下信息

sshd:192.168.92.133:allow  #允许 192.168.0.1 这个 IP 地址 ssh 登录
sshd:192.168.92.0/24:allow #允许 192.168.92.0/24 这段 IP 地址的用户登录
sshd:ALL # 允许全部的 ip通过ssh 登录 

也可以限制从某ip登录

vim /etc/hosts.deny

可以编辑如下信息

sshd:192.168.92.135:deny #拒绝135这个IP地址通过ssh登录
sshd:all:deny    #拒绝所欲sshd远程连接

这里我们对host.deny设置,禁止通过135服务器登录到本机

重启服务

systemctl restart sshd

发现已经不能通过135服务器登录到本机

那么,如果hosts.allow设置为允许133服务器登录,同时,hosts.deny为拒绝133服务器登录的时候,由于hosts.allow文件的优先级高,因此此时可以通过135服务器登录到本机。