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、解密成功,说明登陆信息正确,允许登陆。