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

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

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

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 用户。

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、基于公钥的免密登陆

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

ssh-keygen

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

sudo -u 用户名 ssh-keygen

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

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

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

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

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

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

ssh root@192.168.10.223  

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

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

adduser test
passwd test
su test

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

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

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

ssh root@192.168.10.223

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

sudo -u test ssh root@192.168.10.223

登陆流程如下:

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

 

posted on 2020-01-02 17:13  怀素真  阅读(1648)  评论(0编辑  收藏  举报