Openssh的功能
- sshd服务的用途
当主机中开启openssh服务,那么就对外开放了远程连接的接口
远程管理工具ssh具有数据加密传输、网络开销小以及应用平台范围广的特点,是远程管理中最常见的控制工具
ssh(Secure SHell) —— openssh服务的客户端
sshd(Secure SHell daemon) —— openssh服务的服务端
ssh基本用法
- 基本用法
(1)ssh -l [远程主机用户] <ip | hostname>
ssh -l root 172.25.254.123
通过ssh命令在172.25.254.123主机中以root身份开启远程shell
首先要创建一个新的用户(纯净)
当首次去登录服务端时,系统会自动在家目录下生成一个目录 .ssh。目录中包含有相关的认证信息和密钥信息
验证是否登录成功:查看客户端当前的IP地址是否和服务端的IP地址相同。
相同,则成功。
当收到 客户端的 “yes” 时,服务端会向客户端发送身份公钥,并保存该公钥到~/.ssh/know_hosts
服务端生成的公钥在/etc/ssh里
对比客户端和服务端的公钥,两者是一致的。认证的过程就是两者相互对比的过程
(2)操作:key在服务端上被改变(删除)
此时,再次登录服务端,会报错。
报错的原因:客户端所持有的key与服务端的key不同,匹配不上。服务端认为客户端是一个未认证的人
应对措施:根据报错的提示,删除错误的行
删除服务端的公钥
重新启动守护进程,生成新的公钥
对比客户端和服务端的公钥,两者不同
再次登录服务端时,系统报错,无法登录
根据系统的提示去修改身份认证文件
提示显示是第一行有错误,删除
再次尝试登录服务端,可以正常登录
再次查看客户端和服务端的公钥,两者匹配成功
2. ssh的基本用法
(1)-l 指定远程主机用户(没有开启图形的接口设定)
(2)-Xl 开启图形(gedit)
注意 :要留意当前客户端用户是否有权利打开图形(可以使用默认登陆用户))
注意开启的图形进程是在服务端里
查看方式:ps ax | grep gedit
也可以在该命令后面加上gedit,不用登陆远程主机,就可以开启gedit(会占用shell)
(3)-f 后台运行
不登陆远程主机,且不占用shell
(4)-o 指定连接参数(使内部指令发生一些变化)
删除身份认证文件,代表当前客户端从未连接过任何人(登陆服务端时,需要键入yes)
这时,不想键入yes(不检测),键入以下命令
(5)-t 指定连接跳板
当连接某一台服务器的时候,它会拒绝客户端。可以连接一台它允许的主机,从这台主机跳到远程主机服务端上
先从172.25.254.123跳到172.25.254.123,再连接它自己(跳到虚拟机,再从虚拟机连接它自己)
要求:要跳的那台主机里开了ssh守护进程
在虚拟机里键入 " w -i ",可以查看当前连接该服务端的用户
(6)-i 指定私钥
sshd key密码认证
-
认证类型
对称加密
非对称加密 -
生成密钥
密钥在哪里生成都可以
(1)方法一:ssh-keygen
1. 生成公私钥
ssh-keygen
生成的密钥在/home/username/.ssh/
用户选择在客户端生成公私钥(也可以在服务端生成)
系统会自动生成一个RSA的文件(当然也可以自己设定,但是需要改很多的配置文件,为了方便,默认回车(名字默认))
如果想要密码,必须大于4位。如果没有密码,就是免密登陆
用户所持有的密码就是私钥,它放在/home/yao/.ssh/id_rsa文件里(钥匙)
公钥在/home/yao/.ssh/id_rsa.pub里(锁)
2. 给服务器上锁
ssh-copy-id -i /home/yao/.ssh/id_rsa.pub root@172.25.254.123
虽然生成了公私钥,但是,现在服务端还没有得到这个公钥(还未加密服务器)
(服务器上有很多的用户,我只需要去锁我自己的那个用户)
用用户生成的公钥去加密172.25.254.123主机上的root用户(除了root,其他用户都未加密)
需要征得远程主机(服务端)的同意(这些操作都是内部人员做的)
在远程主机服务端上查看公钥
如果在用户的.ssh/下,看到有id_rsa,则,用户可以免密登陆,不需要输入密码。
操作:从客户端的.ssh中删除文件id_rsa(删除私钥,将文件私钥移入/mnt里)
此时,没有密码,登陆远程主机的时候,需要输入密码
操作:从服务端删除公钥文件
不能免密登陆,需要输入密码
(2)第二种方法:ssh-keygen -f /home/yao/.ssh/id-rsa ——P “”
快速生成密钥:用户不需要交互模式去生成私钥和公钥
ssh-keygen -f /home/yao/.ssh/id-rsa ——P “”
sshd 安全优化参数详解
- 基本默认信息配置
安装包:openssh-server
主配置文件:/etc/ssh/sshd_conf
默认端口:22
客户端命令:ssh
- 安全优化在服务器上操作
(1)改端口号
先用getenforce
去检selinux
是否开启(如果开着,无法更改端口号,因为selinux规定了更改的端口范围)
出现disable
:可以直接更改端口
出现enforcing
:
vim /etc/selinux/config
改成disable
reboot
用专业命令扫描端口
ss -anltupe | grep sshd
可以看到端口号22
ss参数 | 注释 |
---|---|
a | 所有端口 |
l | 活跃,开启的listen |
t | TCP协议 |
u | UDP协议 |
p | 开启的进程名称 |
e | 详细信息 |
n | 不做解析(直接显示ip,不显示主机名) |
如果不加22 -p,系统会自动连接默认端口22(不指定端口)
ssh -l root -p 22 192.168.0.25
修改端口号
vim /etc/ssh/sshd_config
#修改第17行
systemctl restart sshd
systemctl disable --now firewarld
ss -anltupe | grep sshd
systemctl reload sshd.service
扫描端口:nmap 192.168.0.25(未安装)
(2)PermitRootLogin yes --> no 限制连接超级用户
vim /etc/ssh/sshd-config
#46行 yes改成no,超级用户不能登录
#修改后,重启服务
systemctl restart sshd
之后,ssh -l root 192.168.0.25,去登录超级用户,无法登录(被拒绝)
但是,可以登录普通用户westos
(3) 限制所有用户登录(用户的黑白名单)
没有黑白名单,所有人都可以登录
DenyUsers yao(普通用户黑名单)
vim /etc/ssh/sshd_config
#47行:DenyUsers yao
systemctl restart sshd
ssh -l yao 192.168.0.25
用户白名单(只有他可以用)
AllowUsers yao 只允许yao登录,root也无法登录
vim /etc/ssh/sshd_config
#48行:AllowUsers yao
systemctl restart sshd
(4)PasswordAuthentication yes --> no原始认证方式
vim /etc/ssh/sshd_config
#74行:PasswordAuthentication yes --> no
systemctl restart sshd
root经过了key的认证,但是yaoyao未经过认证,会直接被拒绝。因为此时,只有key认证,没有key,就不能登录
(谁有钥匙,谁就可以登录,没有钥匙,连输入密码的权利都没有,避免了暴力破解)