前言:
首先,SSH是目前较为可靠,建立在应用层和传输层基础上的,专为远程登录会话和其他网络服务提供安全性。利用SSH可以有效防止远程管理过程中的信息泄漏问题。通过SSH,可以把所有传输的数据进行加密,而且SSH还有一个额外的好处就是传输的数据是经过加密处理的,所以可以加快传输的速度。SSH还有其他的很多功能,他既可以替代Telnet,又可以为FTP、PoP、甚至是PPP提供一个安全的通道。
1.基于口令的安全验证
这种方式使用用户名密码进行联机登录,一般情况下我们使用的都是这种方式。整个过程大致如下:
(1)客户端发起连接请求。
(2)远程主机收到用户的登录请求,把自己的公钥发给客户端。
(3)客户端接收远程主机的公钥,然后使用远程主机的公钥加密登录密码,紧接着将加密后的登录密码连同自己的公钥一并发送给远程主机。
(4)远程主机接收客户端的公钥及加密后的登录密码,用自己的私钥解密收到的登录密码,如果密码正确则允许登录,到此为止双方彼此拥有了对方的公钥,开始双向加密解密。
Note:当网络中有另一台冒牌服务器冒充远程主机时,客户端的连接请求被服务器B拦截,服务器B将自己的公钥发送给客户端,客户端就会将密码加密后发送给冒牌服务器,冒牌服务器就可以拿自己的私钥获取到密码,然后进行操作。因此当第一次链接远程主机时,在上述步骤的第(3)步中,会提示您当前远程主机的”公钥指纹”,以确认远程主机是否是正版的远程主机,如果选择继续后就可以输入密码进录了,当远程的主机接受以后,该台服务器的公钥就会保存到 ~/.ssh/known_hosts文件中。
2.基于密匙的安全验证
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。
Note:简单来说,就是将客户端的公钥放到服务器上,那么客户端就可以免密码登录服务器了,那么客户端的公钥应该放到服务器上哪个地方呢?默认为你要登录的用户的家目录下的.ssh目录下authorized_keys 文件中(即:~/.ssh/authorized_keys)。
3.常用相关配置
SSHD服务的配置文件位于/etc/ssh/sshd_config
配置项一:PubkeyAuthentication 是否允许使用密钥验证方式登录
配置项二:AuthorizedKeysFile允许登录主机的公钥存放文件,默认为用户家目录下的 .ssh/authorized_keys
配置项三:PermitRootLogin no 禁止root远程登录
配置项四:PasswordAuthentication no 不允许密码方式的登录
配置项五:PermitEmptyPasswords no 禁止空密码进行登录
配置项六:PubkeyAuthentication yes 允许公钥认证
配置项七:Port <端口号> 修改默认端口号
配置项八:UsePrivilegeSeparation yes 用户权限设置
4.权限问题
~/.ssh文件夹 700 chmod 700 .ssh
authorized_keys文件 644 chmod 644 .ssh/authorized_keys
5.图形解读
6.本次操作实现(本次操作是在centos7/RHEL 7上执行成功)
客户端:192.168.122.1 用户:root(也可以是其他用户)
服务器:192.168.122.7 用户:root(也可以是其他用户)
相关操作:
ssh-keygen -t rsa -P ” -f ~/.ssh/id_rsa
选项与参数:
这个命令会产生一个公钥(/.ssh/id_rsa.pub)和密钥(/.ssh/id_rsa),
-t dsa:表示使用密钥的加密类型,可以为’rsa’和’dsa’
-P ”:表示不需要密码登录
-f ~/.ssh/id_rsa:表示密钥存放的路径为${USER}/.ssh/id_rsa
客户端配置:
[root@localhost ~]# yum install openssh-clients openssh-server
然后将生成的id_rsa.pub传送给服务端并进行ssh登陆测试
登陆成功ssh验证ok
服务器端配置
[root@server7 ~]# yum install openssh-server openssh-clients
系统自动将id_rsa.pub文件里的内容写入authorized_keys中
NOTE:之后你从客户端使用 root 用户登录服务器的root用户时就不需要再输入密码了,但是你的一对公钥和私钥已经生成如果其他用户将私钥内容写入~/.ssh/authorized_keys文件中,那么这个用户也可以通过无密码认证登入你的root。
docker里没有ssh-key这个命令,只能在宿主机上生成公钥和私钥然后倒入docker中