SSH详解(远程登陆协议)
SSH定义:简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
注意:由于我用的是两台虚拟机,虚拟机没有ip,如果你是真机可以跳过第一步。
1.首先给两台虚拟机配置ip,真机跳过此步骤
命令行输入 nm-connetion-editor
删除当前的条目delete->然后在添加add
进入iPv4 Settings选项 ->选择Method :manual选项
点击add->设置ip地址,子网掩码,网关默认可以不用设置
保存
查看ifconfig ->成功
2.ssh的登陆
我的两台虚拟机的ip分别为
desktop:172.25.74.174
server:172.25.74.124
连接方式:
现在我们用desktop连接server
首先我更改一下主机名,便于识别desktop和server,可以不需要看过程,最后的结果是desktop的命令行[root@localhost ~]变成了[root@server ~]#,server的命令行[root@localhost ~]#变成了[root@desktop ~]#。
修改主机名:
[root@localhost ~]# hostnamectl set-hostname server //设置主机名为server
[root@localhost ~]# hostname //查看主机名
server
ssh的连接:
1.ssh 目标主机的ip ##默认以目标主机的root身份登陆
[root@desktop ~]# ssh 172.25.74.124 //以desktop的身份登陆server
The authenticity of host '172.25.74.124 (172.25.74.124)' can't be established.
ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
Are you sure you want to continue connecting (yes/no)? yes //输入yes
Warning: Permanently added '172.25.74.124' (ECDSA) to the list of known hosts.
root@172.25.74.124's password: //输入server端root用户的密码
Last login: Sun Jan 13 21:18:34 2019 from 172.25.74.250
[root@server ~]# //登陆成功
2.ssh 用户名@目标主机的ip ##指定目标主机的身份登陆
下面用desktop登陆server端的普通用户
[root@server ~]# cat /etc/passwd | grep student
student:x:1000:1000:Student User:/home/student:/bin/bash //首先server端有一个student用户
[root@desktop ~]# ssh student@172.25.74.124 //以student的身份登陆
student@172.25.74.124's password: //刚刚已识别主机,只需要验证student的密码即可
[student@server ~]$ //登陆成功
3.ssh的免密登陆
方式1:在desktop端生成公钥和私钥,把公钥发给server端,私钥自己保存。就可以免密连接,公钥相当于一把锁,私钥相当于那把锁对应的钥匙,一把锁对应一把钥匙,拥有钥匙的用户可以连接拥有对应锁的主机。
desktop端:
[root@desktop ~]# cd /root/.ssh //进入 /root/.ssh目录,这是保存公钥和私钥的地方
[root@desktop .ssh]# rm -rf * //清空
[root@desktop .ssh]# ssh-keygen //生成公钥和私钥
一直按回车...
[root@desktop .ssh]# ls
id_rsa id_rsa.pub //id_rsa 是私钥, id_rsa.pub 是公钥
[root@desktop .ssh]# ssh-copy-id -i id_rsa.pub root@172.25.74.124 //将公钥发给server端
[root@desktop .ssh]# ssh 172.25.74.124 //可以免密连接
Last login: Sun Jan 13 21:58:25 2019 from 172.25.74.174
[root@server ~]#
如何实现双向免密?
在server端执行和desktop相同的操作。
方式2:使用server端生成公钥和私钥,把公钥发给自己,把私钥发给desktop。公钥相当于一把锁,私钥相当于那把锁对应的钥匙,一把锁对应一把钥匙,拥有钥匙的用户可以连接拥有对应锁的主机
server端:
[root@server ~]# cd /root/.ssh //进入 /root/.ssh目录,这是保存公钥和私钥的地方
[root@server .ssh]# rm -rf * //清空
[root@server .ssh]# ssh-keygen //生成公钥和私钥
一直按回车...
[root@server .ssh]# ls
id_rsa id_rsa.pub //id_rsa 是私钥, id_rsa.pub 是公钥
[root@server .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.74.124 //使用这个命令将公钥挂给自己,这条命令是把/root/.ssh/id_rsa.pub公钥,发给ip为172.25.74.124的root用户。
[root@server .ssh]# scp /root/.ssh/id_rsa root@172.25.74.174:/root/.ssh //将私钥给到desktop端的/root/.ssh/目录下
desktop端:
[root@desktop .ssh]# ls
id_rsa //存在server端发来的私钥
[root@desktop .ssh]# ssh 172.25.74.124 //连接server端
The authenticity of host '172.25.74.124 (172.25.74.124)' can't be established.
ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
Are you sure you want to continue connecting (yes/no)? yes //第一次连接需要识别主机
Warning: Permanently added '172.25.74.124' (ECDSA) to the list of known hosts.
Last login: Sun Jan 13 21:30:58 2019 from 172.25.74.250
[root@server ~]# exit //成功免密连接server端,退出在连
logout
Connection to 172.25.74.124 closed.
[root@desktop .ssh]# ssh 172.25.74.124 //不需要密码直接连接成功
Last login: Sun Jan 13 21:58:09 2019 from 172.25.74.174
[root@server ~]#
4.sshd的安全设定
ssh服务的主配置文件在/etc/ssh/sshd_config下,可以通过修改此配置文件来达到控制ssh的效果。
1.控制用户的登陆方式
[root@server .ssh]# vim /etc/ssh/sshd_config
78 PasswordAuthentication yes # //yes:支持密码/密钥登陆。no:不能用密码登陆,只能用密钥登陆
现在我在server端把PasswordAuthentication 的yes改为no,由于我修改了配置文件,所以要重起服务来加载新配置,重起配置代码来systemctl restart sshd.service。现在测试远程用户的两种登陆方式是否有效。
[root@desktop .ssh]# rm -rf * //清空desktop端的密钥
[root@desktop .ssh]# ls
[root@desktop .ssh]# ssh 172.25.74.124 //密码登陆
...
Permission denied (publickey,gssapi-keyex,gssapi-with-mic). //密码登陆失败
结论:修改后,密码登陆失败,密钥登陆成功。
2.控制不能以root身份登陆
48 PermitRootLogin yes # // 用户是否可以以root身份登陆
修改server端的 PermitRootLogin yes为no,重起服务,测试两种用户登陆是否成功
[root@desktop .ssh]# ssh 172.25.74.124 //以root用户的身份登陆
root@172.25.74.124's password:
Permission denied, please try again. //登录失败
[root@desktop .ssh]# ssh student@172.25.74.124 //以普通用户的身份登陆
student@172.25.74.124's password:
Last login: Sun Jan 13 21:33:32 2019 from 172.25.74.174 //登陆成功
[student@server ~]$
3.设置黑白名单
可以在配置文件的第79行加入以下代码
Allowusers username(服务端存在的用户并且有锁) ##sshd用户的白名单,只允许该用户登陆,其他用户不可登陆
Denyusers username(服务端存在的用户并且有锁)#sshd用户的黑名单,该用户不可登陆,其他用户可以登陆
5.添加sshd登陆信息
通过给/etc/motd添加内容,我们可以控制登陆时显示的信息,如下
[root@desktop .ssh]# ssh root@172.25.74.124
Last login: Mon Jan 14 04:26:06 2019 from 172.25.74.174
you are a stupid boy!!! //手动添加的信息
##用户登陆审计
w #查看正在使用当前系统的用户
w -f#查看使用来源
w -i#显示ip
last #查看使用过并退出的用户信息
lastb #试图登陆但没有成功的用户