服务至上
什么是SSH?
发布日期:2023-11-08 来源: 浏览次数: 作者:NIC


一、SSH

SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSHLinux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。

SSH之所以能够保证安全,原因在于它采用了公钥加密

整个过程是这样的:

1)远程主机收到用户的登录请求,把自己的公钥发给用户。

2)用户使用这个公钥,将登录密码加密后,发送回来。

3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"Man-in-the-middle attack)。

二、SSH的安装

SSH分客户端openssh-clientopenssh-server。

如果你只是想登陆别的机器的SSH只需要安装openssh-clientubuntu有默认安装,如果没有则sudoapt-get install openssh-client),如果要使本机开放SSH服务就需要安装openssh-server

1.jpg

启动ssh服务

2.jpg

停止和重启ssh服务的命令如下:

3.jpg

三、SSH中的四个文件

id_rsa:私钥

id_rsa.pub:公钥

known_hosts:存储的是远端主机的公钥(例子中的主机A,主动发起连接者,保存B的公钥)

authorized_keys:存储的远端主机的公钥(例子中的B,被动连接者,保存A的公钥)-是授权文件,是在ssh-copy-id命令之后,保存的A的公钥,否则一般不会保存A的公钥。

例:A通过ssh首次连接到BB会将公钥1host key)传递给AA将公钥1存入known_hosts文件中,以后A再连接B时,B依然会传递给A一个公钥2OpenSSH会核对公钥,通过对比公钥1与公钥2 是否相同来进行简单的验证,如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。