1.设定实验环境
打开两台虚拟机,一台做客户端(client),
另一台做服务器(server)
###设置客户端
nm-connection-editor ##设置ip:ip1
ip addr show eth0
hostnamectl set-hostname westosclient.example.com ##设置为客户端
rm -fr /root/.ssh/
修改背景颜色:Edit–Profile Preferences–Colors–取消Use colors from system theme–close
###设置服务端
nm-connection-editor ##设置ip:ip2
ip addr show eth0
hostnamectl set-hostname westosserver.example.com ##设置为服务端
rm -fr /root/.ssh/ ##当删除此文件,客户端解密文件失效
在客户端查看是否可以连接到服务端,并在服务端建立一个文本
ssh username@ip ##文本形式的链接
ssh -X username@ip ##被连接的主机如果有图形界面,则可以在链接成功后开启部分图形
注意:第一次连接陌生主机是要建立认证文件的,所以会询问是否建立,需要输入yes;
再次链接时,因为已经生成XXX/.ssh/know_hosts文件,所以不需要再次询问
2.生成钥匙
###没有拷贝密钥给客户端——————客户端需要密钥才能进入服务端
###拷贝密钥给客户端——————客户端不需要密码进入
在服务端
cd ##切换路径,进入服务端
systemctl stop network ##停止network服务
ifconfig eth0 ##查询所有网卡的状态及信息(ifconfig用来查看、配置、启用或禁用网络接口)
systemctl stop NetworkManager.service ##停止网络管理服务
systemctl stop sshd.service ##停止sshd服务
killall -9 sshd ##关闭sshd所有进程
systemctl start network.service ##启动服务
systemctl start NetworkManager ##启动网络管理服务
systemctl start sshd.service ##启动sshd服务
ssh-keygen ##生成钥匙和锁,
ls /root/.ssh/ ##查看密钥文件,id_rsa(私钥)、id_rsa.pub(公钥)
ssh-copy-id -i /root/.ssh/id_rsa.pub root@ip2 ##为此ip2服务端下的root用户上锁
《《ssh-copy-id -i 加密文件 用户@主机ip》》
ls /root/.ssh/ ##查看密钥文件,authorized_keys、id_rsa、id_rsa.pub,如果远程登录过一次客户端,会看到还增加了known_hosts(连接过主机的信息)
scp /root/.ssh/id_rsa root@ip1:/root/.ssh/ ##把密钥拷贝到ip1(客户端)的/root/.ssh/,,,给ip1的root用户分发可直接连接ip2的钥匙(id_rsa)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191014195224495.png
到客户端查看,可以看到ip1客户端不需要密码就可以直接连接至ip2服务端的root用户
在客户端查看是否能连接到服务端
ls /root/.ssh/ ##查看密钥文件
ssh -X root@ip2 ##直接进入服务端
logout ##每次验证完都要退出服务端
id_rsa.pub是公钥,如果需要登录到远程主机,需要到远程主机/root/.ssh/目录下新建authorized_keys文件,并将id_rsa.pub里面的内容复制进去。
authorized_keys相当于密码,而id_rsa.pub相当于是装密码的盒子,如果把密码删掉,则客户端再次登录时需要输入密码才能登录。
3.修改文件,是否需要密码验证
(如果PubkeyAuthentication【公钥身份认证】为yes,则78PasswordAuthentication【密码验证】不论yes或者no都可以进入;
如果PubkeyAuthentication【公钥身份认证】为为no则PasswordAuthentication【密码验证】yes——需要密码才能进入;no——不需要密码进入)
sshd的安全配置:
sshd的安全配置:
在客户端先把服务端的密钥删除:
cd /root/.ssh/ ##进入到密钥文件下
ls ##查看文件内容,有id_rsa known_hosts
rm -fr id_rsa ##删除服务端的私钥
ls ##查看是否删除,剩下known_hosts
vim /etc/ssh/sshd_config ##编辑文件
把PasswordAuthentication的yes改为no ##是否需要密码验证
systemctl restart sshd.service ##每次设置完都要重置一下服务
————》到客户端验证实验,现象:进入服务端被拒
把no改为yes,则客户端需要输入密码才能进入服务端
###修改私钥名称
在服务端:
cd /root/.ssh/ ##进入密钥目录
rm -fr /root/.ssh/ ##删除密钥目录
cd ##进入服务端
ls /root/.ssh/ ##查看是否删除密钥目录
ssh-keygen ##生成钥匙和锁
ls /root/.ssh/ ##查看是否生成私钥和公钥
ssh-keygen -f /root/.ssh/id_rsa -P "" ##更改私钥为空
ls /root/.ssh/
ssh-copy-id -i /root/.ssh/id_rsa.pub root@服务端ip ##给服务端上锁,在客户端验证结果为需要密码才能进入服务端
ls /root/.ssh/ ##查看密钥文件,authorized_keys,id_rsa,id_rsa.pub,known_hosts
scp /root/.ssh/id_rsa root@客户端ip:/root/.ssh/ ##把密码给客户端,在客户端验证结果为不需要密码都可以进入服务端
在客户端删除私钥文件,则需要密码才可进入服务端
cd /root/.ssh/ ##进入密钥文件
ls ##查看密钥文件内容
rm -fr id_rsa ##删除服务端给的私钥
验证需要密码才能进入服务端
###查看系统对外开放接口
在做这个实验之前,把密码验证改为yes
netstat命令显示:命令连接、路由器、接口统计信息、掩饰连接、多播(多路传送)成员
【-t】显示tcp协议(快、微信、短信)的连接情况
【-u】显示udp协议(电话)的连接情况
【-l】显示监听本地端口的tcp程序
【-n】显示ip地址
【-p】显示进程名称和pid
【-a】显示所有的socket,包括正在监听的
【grep】查找监听本地某端口的进程
netstat -antulp | grep sshd ##系统一般默认为22接口
vim /etc/ssh/sshd_config ##修改17行Port接口为23
systemctl restart sshd.service ##重启服务
setenforce 0 ##关闭端口
netstat -antulp | grep sshd ##出现23端口
systemctl stop firewalld ##关闭火墙
###开放端口变少:绑定ip,只有指定ip可以进入
vim /etc/ssh/sshd_config
修改ListenAddress 为主机正在激活使用的ip
systemctl restart sshd.service
ssh root@ip -p 23 ##从23接口连接ip(一般默认为22接口,但上个实验修改了接口,所以必须加-p 23)
###限制超级用户
vim /etc/ssh/sshd_config
修改48PermitRootLogin(是否让超级用户登录) yes:超级用户可以登录 no:超级用户可以登录
systemctl restart sshd.service
ssh root@ip -p 23
###密钥认证
在本次实验之前还原限制超级用户为yes,把port接口注销
vim /etc/ssh/sshd_config
修改PubkeyAuthentication
systemctl restart sshd.service
scp /root/.ssh/id_rsa root@客户端ip:/root/.ssh/
在客户端验证ssh root@ip
密钥认证打开yes————直接进入ip
密钥认证关闭no————需要输入密码才可进入ip
###设置黑名单、白名单
密码验证为yes
黑名单DenyUsers lee ##只有lee用户不能登录
白名单AllowUsers lee ##只有lee用户可以登录,其他均不能登录