posts - 404,  comments - 115,  views - 118万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

ssh 是一种网络协议,为远程登陆和其他服务提供了安全协议。在 ssh 没出来之前,很多服务是明文传输的,很不安全。ssh 的出现就是为了解决这种问题。

现在大多数的 linux 主机默认就装上了 sshd 服务,方便我们使用。

如果没有安装,则查看,并安装。

1
2
3
4
5
6
rpm -qa|grep ssh
yum install -y openssh openssh-server
systemctl enable sshd
systemctl start sshd
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --reload

  

一、ssh的两种安全验证

1、基于口令的登陆

比如我们在主机 192.168.10.222 上通过 ssh 以 root 用户连接 223 主机,注意 223 主机上必须要有 root 用户。

1
ssh root@192.168.10.223

  

如果第一次登陆远程主机,系统提示该主机安全性无法确定,是否继续。当我们输入 yes 后,该远程主机的公钥会保存在 ~/.ssh/known_hosts 文件中。

再次登陆时,会跳过警告,直接提示输入密码。

然后我们输入密码,就可以成功登陆到 223 主机了。

整个登陆流程如下:

1、222 主机发起远程登陆请求。

2、223 远程主机返回公钥给 222。

3、222 主机使用公钥对用户输入的密码进行加密。

4、222 把加密后的密码发给 223 主机。

5、223 主机用私钥进行解密。

6、解密后判断密码是否一致,一致就同意登陆。

当然,上面的流程会存在一个漏洞,如果有人冒充了 223 主机,把伪造的公钥发给222,那冒充主机就可以获取用户的登陆密码了。

 

2、基于公钥的免密登陆

由于时常需要跑一些自动化脚本,为了避免每次登陆需要输入密码,我们需要配置一对密钥。

1
ssh-keygen

也可以指定用户运行 ssh-keygen,那样生成的密钥对就是针对指定用户的。

1
sudo -u 用户名 ssh-keygen

通过 ssh-keygen 一路回车,将会在当前用户的家目录下的 .ssh 目录下创建 id_rsa 和  id_rsa.pub 两个文件。

由于222 主机当前登陆用户为 root,所以路径为 /root/.ssh/ 。

为了能够以 root 用户登陆到 223 主机。我们需要把 222 主机上的 root 用户的公钥拷贝到 223 主机的 root 用户上。

1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.223

传输公钥时,需要我们输入 223 主机 root 用户的密码,输入成功后,则公钥就拷贝到了 223 主机的 root 用户家目录下的 .ssh/authorized_keys 文件里。

这样,我们再次远程连接时,就不需要输入密码了。

1
ssh root@192.168.10.223  

注意,你请求主机以什么用户连接远程主机,你就把当前用户的公钥拷贝到你要连的远程主机的用户下。

比如,我们在 222 主机上创建 test 用户并切换到 test 用户,然后连接 223 主机。

1
2
3
adduser test
passwd test
su test

然后我们为 test 用户生成密钥对,然后把公钥拷贝到 223 主机的 root 用户上。

1
2
ssh-keygen
ssh-copy-id -i /home/test/.ssh/id_rsa.pub root@192.168.10.223

这样,我们以 222 主机上的 test 用户,就可以免密登陆 223 主机了。

1
ssh root@192.168.10.223

切回 root 用户后,我们仍可以 test 用户登陆远程主机。

1
sudo -u test ssh root@192.168.10.223

登陆流程如下:

1、222 主机发起远程登陆请求。
2、远程 223 主机返回一个随机串。
3、222 主机对这个随机串用私钥进行加密,并返回给远程 223 主机。
4、223 远程主机使用分发过来的公钥对随机串进行解密。
5、解密成功,说明登陆信息正确,允许登陆。

 

posted on   怀素真  阅读(1661)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2018-01-02 Beanstalkd消息队列的安装与使用
点击右上角即可分享
微信分享提示