一、什么是SSH?
SSH是一种网络协议,用于计算机之间的加密登录。在出现SSH之前,系统管理员需要登入远程服务器执行系统管理任务时,都是用telnet来实现的,telnet协议采用明文密码传送,在传送过程中对数据也不加密,很容易被不怀好意的人在网络上监听到密码。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
二、SSH两种方式的用户登录认证:
SSH连接是CS模型(客户端-服务器),客户端发出连接申请,服务器对客户端进行验证,再考虑是否接受连接申请。
SSH的安全加密方式的理论基础是非对称加密体系
1、基于password:
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
大致流程:
客户端发起ssh请求,服务器会把自己的公钥发送给用户
用户会根据服务器发来的公钥对密码进行加密
加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
2、基于密钥的登录方式:
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
大致流程:
首先在客户端生成一对密钥
并将客户端的公钥ssh-copy-id拷贝到服务器端
当客户端再次发送一个连接请求,包括ip、用户名
服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,服务器就会发出“质询”(challenge)表现为一串随机字符,如:abcd。
服务端将使用客户端拷贝过来的公钥对“质询”进行加密,然后发送给客户端
得到服务端发来“质询”后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
两种登录认证的对比:
基于密钥的认证方式,用户必须指定自己密钥的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程会比基于passwd认证稍长,可能需要10秒
三、OpenSSH配置文件
OpenSSH常用配置文件有两个/etc/ssh/ssh_config 和 /etc/ssh/sshd_config
ssh_config 为客户端配置文件,sshd_config 为服务端配置文件,此外/etc/ssh/目录中还有一些其他文件,对这些文件进行下说明:
moduli # 配置用于构建安全传输层 所必须的密钥组
ssh_host_ecdsa_key #SSH2版本所使用的ecdsa私钥
ssh_host_ecdsa_key.pub #SSH2版本所使用的ecdsa公钥
ssh_host_ed25519_key #SSH2版本所使用的ed25519私钥
ssh_host_ed25519_key.pub #SSH2版本所使用的ed25519公钥
ssh_host_rsa_key #SSH2版本所使用的RSA私钥
ssh_host_rsa_key.pub #SSH2版本所使用的RSA公钥
1、SSH客户端配置文件
/etc/ssh/ssh——config
配置文件概要
===========================================