首先,在windows系统当中我们其实有远程登陆其他主机的工具(但要收费),还有类似功能的“向日葵”,那windows 我们能不能远程控制其他主机呢?
带着这个问题我们来引入今天我们要讲到 SSH 协议,ssh协议可以使系统通过不安全的网络 以加密&安全的方式进行通信。
而我们今天要学习的就是基于SSH协议的远程登陆主机的ssh命令
一.ssh命令基础讲解
开始之前,你最好在创建一个虚拟机或者你克隆一个当前你的虚拟机,克隆完以后记得把IP地址稍微修改一下哈
下面我们就来学习下ssh命令的格式
ssh 格式 :ssh 远程主机用户名@主机IP地址(有时候你会看到不是IP地址的,那是因为域名通过DNS解析获得了IP地址,这个知识点我们后面会讲解的)
我的 centos0 主机的IP地址是 192.168.254.10
centos1 主机的IP地址是 192.168.254.101
我们来看一张图
首先我们来看第一个大红括号,当我们第一次使用 ssh 远程登陆一台主机的时候,系统会提示我们 保存一个专属于这台主机的 “指纹钥匙”。 这个 “指纹钥匙”最大的好处,就是当有其他恶意主机故意冒充你所要连接的主机的时,虽然 看上去一样,但因为这个冒牌主机上面没有 这个 “指纹钥匙”和我们一开始连接保存在本主 机的 “指纹钥匙” 副本内容不同,所以主机这时会重新提醒你。
而第二个红括号就是需要你输入远程用户的密码进行登陆。
我们在看第三个黄色括号,会发现我们这次再次登陆远程主机的时候没有提示 “指纹钥匙” ,说明主机还是那个主机,这时只要输入用户密码就好了。
因为每次都需要输入主机的IP地址,为了避免这个麻烦,我们在 /etc/hosts 中设置 192.168.254.111 的域名解析 centos1
这里可以看见我有设置了很多的域名解析
二.ssh“指纹钥匙”存储位置
这里我们把 centos0 比作 客户端。 Centos1 比作 服务器
当我 centos0 连接 centos1 的时候, “指纹钥匙” 副钥会保存在
客户机的 ~/.ssh/known.hosts
服务器的 /etc/ssh/
我们首先从 客户机上 查看 “指纹钥匙”
首先我们先看第一个红括号,我们先到客户端查看副钥的位置,我们在这个位置中 存在一个 known_hosts 文件,我们打开文件,看上黄线部分,这块很多很多的字母数字就是我的副钥的内容了
我们在来看看 “服务器”位置上面的 钥匙,我们首先看向第一个红括号,这里就是我们服务器存储 “指纹钥匙”的位置,我们在来看第二个红括号,大家注意所有 以 .pub 结尾的文件都是存放 “指纹钥匙”的,他们唯一的不同就是运用的算法不同。
这个ssh登陆远程主机的形式其实并不难,很简单,但却不是特别的安全,如果有一名黑客想要攻击你的电脑,那么它只需要猜出你roo用户的密码就可以了。这不仅对个人来说非常的不安全,对于企业来说也是绝对不允许的。
所以我们这里我们就要引入 SSH密钥验证这个概念
三.ssh密钥
大概流程就是:
1.我们先生产一个公钥对,一个给本机一个给远程主机。
2.然后我们在客户端配置一个私钥 ,这个私钥用于在两个公钥配对成功后,进行登陆
(这就有点,钥匙(私钥)和门(公钥)的关系)
只要我们在 /etc/ssh/sshd_config 文件中修改部分条目的内容,禁止root用户远程登陆和使用密码远程登陆(这一块后面会讲解到的),那么一个黑客想要进攻你的机器基本就会非常非常的困难了。
那么为了让我们的电脑更加的安全,我们就跟着上面的思路来进行命令的学习吧
第一步:创建公钥和私钥
格式:ssh-keygen
我们在终端上使用了 ssh-keygen 后,我们先来注意到黄括号的内容,这里主要让你输入你想把密钥文件放在那里,如果你上面都不输入,按回车,系统会默认保存在当前用户家目录中的 .ssh中
看红括号,这里主要需要你输入私钥文件的密码(也叫密语),如果你不输入,那么你直接用含有私钥的主机就能登陆远程机了(不用输入任何密码),所以这样非常的不安全,这边建议大家还是设置一个。
看绿括号,这里就是配置完成后系统将你的私钥和公钥存放的地址,公钥的文件时以 .pub结尾的
看蓝括号,这里就是我们公钥,这里的内容和我们在公钥文件中的不一样,那里的文件内容时被加密过的
第二步:将公钥发送到远程主机上
格式:ssh-copy-id 用户@虚拟机名称 -i 指定公钥存放位置
注意看第一个红括号,ssh-copy-id 将我们 /root/.ssh/id_rsa.pub 下载到了远程主机上,因为我这里没有使用 -i 指定下载地址,系统默认给我存放在远程主机上 ~./ssh/authorized.keys
在看第二个红括号,你会发现我们这次 使用 ssh root@centos1 远程登陆主机的时候,使用的不是密码登陆还是使用的密语进行登陆的。
这里我们进入的centos1中,我们打开 ~/.ssh目录,查看 authorized.keys文件内容,然后返回centos0查看 id_rsa.pub 的内容,我们发现它们两个的内容是一样的,那么这里就可以确定 authorized.keys就是id_rsa.pub传送过的公钥副本。
第三步:修改 ssh配置文件
在这个文件中存在非常多的变量名。在这里我们只需要知道两个就够了
第一个: Permit RootLogin 允许root用户远程登陆
第二个: Passwd Authentication 允许通过用户密码通过登录
我们看到 Permit RootLogin 默认是yes ,且处于被注释状态,如果你想修改不允许使用 root用户登陆 ,把#号去掉, 将 PermitRootLogin no 就好了,passwordAuthentication 也是一样的。
修改完以后退出记得在使用 systemctl reload sshd 重新加载下配置。
下面你在尝试使用root用户登陆或用户密码登陆时会发现这时就无法进行连接了
四.密钥登陆小技巧
下面我在来教大家一点小的知识点,这个知识点可以方便你的ssh远程登陆主机操作,但并不是必须要掌握的,但非常的简单和方便,你可以根据自己的需求进行观看。
ssh-agent命令操作流程。
1.eval $(ssh-agent):启动ssh-agent
2.ssh-add 私钥文件:将私钥文件缓存到内存中
我们先来看第一个红括号,这里我们先来激活 ssh-agent
在来看第二个红括号,我们在 ssh-add 将id_rsa 的文件密语缓存到内存当中。
现在我们在来看黄色的括号,出现了这些内容,说明密钥密语已经添加被缓存到内存当中去了
我们在来看蓝色的括号,可以发现我们这次使用 ssh root@centos1 登陆远程主机的时候就不需要输入密语了。
注意关机后就失效了!!!
好了好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,今天的学习内容并不是很多,关键多打几遍就会了,有啥不会的朋友记得论坛里面提问哈~
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈~嘿嘿嘿~我会定期更新文章的,谢谢朋友你的支持哈~