ssh服务在上一篇中做了简要介绍,本节进入实战篇(一)
SSH协议默认开放的是TCP 22号端口
前一节讲到SSH首次启动时,由于没有公钥和私钥的存在,在启动时,会生成本机的公钥和私钥数据。这里模拟一个SSH首次启动的场景,即手动删除/etc/ssh/下的公钥和私钥文件,重启SSH服务时,观察公钥和私钥已经生成。
注意:在系统中一般默认安装了相关的软件,包括产生密码协议的OpenSSL软件和openssh软件
SSH提供了两个功能:
1、提供shell给我们使用;
2、提供一个比较安全的FTP-server
SSH连接远程设备相关命令:
ssh [-f] [-o 参数] [-p 端口] [用户账号@]IP [指令]
-f:需要配合后面的[指令],作用是不登陆远程设备,仅仅发送一个指令过去
-o 参数:
ConnectTimeout=时间(单位:秒) 表示SSH连接等待的时间,设置参数可以减少连接等待的时间
StrictHostKeyChechking=yes|ask|no 默认参数是ask,主要是远程主机对公钥数据进行核查。首次连接远程主机之后,远程主机会把客户端的公钥存放在~/.ssh/known_hosts;再次连接远程主机的时候,远程主机对比本次的公钥与存放的公钥数据是否一致。若要让公钥主动加入~/.ssh/known_hosts,设定no即可。
-p :远程主机SSH服务开放的端口(默认开放22端口)
[指令]:不登入远程主机,直接发送命令过去。
如果执行命令时间较长,会发现会卡在输入密码的这个阶段,这是因为命令还没有执行完,只有等待命令执行完毕后才会断开连接,这个时候配合-f命令使用
注意:一般登陆远程设备,都会按照 ssh -p 端口 用户账号@ip 的格式。如果不写账号,会以本端的账号来尝试登陆远程设备。例如:A服务器登陆B服务器,A服务器现在是test普通账号,直接ssh B服务器ip,那么会用test账号登陆B,B中如果没有此账号,则会报错。
登陆远程设备时,RSA这行会出现公钥指纹码,如果没有问题,输入yes后会主动写入公钥记录文件~/.ssh/known_hosts中
服务器公钥记录文件:~/.ssh/known_hosts
当进行远程服务器连接时,本端会将对端发送过来的公钥去~/.ssh/known_hosts进行比对:
1、若没有该公钥记录,则ask用户是否需要记录,记录则写入~/.ssh/known_hosts文件;不记录则不写入该文件,登陆结束退出
2、若收到的公钥已经记录在案,则比对二者是否相同,若相同则进行后面的登陆操作;若不相同,则出现告警信息,且退出登陆。
模拟场景:假设A服务器之前登陆过B服务器,但是B服务器系统重新安装并启动SSH服务,造成B服务器的公钥发生改变,会出现什么样的后果以及如何处理呢?
1、在B服务器上删除公钥和私钥文件,并重启SSH服务
2、A服务器重新登录B服务器
A登录时提示,有可能是中间人攻击,也可能是远程主机的公钥改变。检查/roo/.ssh/known_hosts文件第一行的公钥文件,已经发生改变。
此时还想登录B的话,删除/root/.ssh/known_hosts文件的第一行内容即可