1. ssh概述

ssh是(Secure SHell protocol) 的简写,安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。

2. ssh 主要功能

  • 一个就是类似 telnet 的远程联机使用 shell 的服务器,即 ssh

  • 另一个就是类似 FTP 服务的 sftp-server ,提供更安全的 FTP 服务

3. ssh 工作原理

SSH与openssh_第1张图片

  • 服务器建立公钥: 每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host* 的文件,若系统刚刚安装完成时,由于没有这些公钥,因此 sshd 会主动去计算出这些需要的公钥,同时也会计算出服务器自己需要的私钥

  • 客户端主动联机请求: 若客户端想要联机到 ssh 服务器,则需要使用适当的客户端程序来联机,包括 ssh, putty 等客户端程序连接

  • 服务器传送公钥给客户端: 接收到客户端的要求后,服务器便将第一个步骤取得的公钥传送给客户端使用 (此时应是明码传送,反正公钥本来就是给大家使用的)

  • 客户端记录并比对服务器的公钥数据及随机计算自己的公私钥: 若客户端第一次连接到此服务器,则会将服务器的公钥记录到客户端的用户家目录内的 ~/.ssh/known_hosts 。若是已经记录过该服务器的公钥,则客户端会去比对此次接收到的与之前的记录是否有差异。若接受此公钥, 则开始计算客户端自己的公私钥

  • 回传客户端的公钥到服务器端: 用户将自己的公钥传送给服务器。此时服务器:具有服务器的私钥与客户端的公钥,而客户端则是: 具有服务器的公钥以及客户端自己的私钥,你会看到,在此次联机的服务器与客户端的密钥系统 (公钥+私钥) 并不一样,所以才称为非对称加密系统

  • 开始双向加解密: (1)服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密 (2)客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密,这样就能保证通信安全

4. ssh 组成

(1). ssh 协议使用的是tcp 22号端口,telnet 使用的是tcp 的23号端口,ssh协议是C/S架构,分为服务器端与客户端。

(2). 服务器端的程序有 sshd

客户端的程序有,Windows下 putty,SecureCRT,SSHSSH Secure Shell Client …… Linux下有,ssh

5. ssh 工具实现

OpenSSH 包括sshd主程序与ssh客户端

6. sshd 配置文件详解

vim /etc/ssh/sshd_config

#1. SSH Server 全局设定,port ,协议 ……

  • # Port 22  #默认端口,也可以使用多个端口

  • Protocol 2 #协议版本号

  • # ListenAddress 0.0.0.0 #默认值是监听所有接口的 SSH 要求

  • # PidFile /var/run/sshd.pid #放置 SSHD 这个 PID 的文件

  • # LoginGraceTime 2m #2分钟之内不输入密码,自动断开

  • # Compression delayed  #使用压缩数据模式进行传输,登入后才将数据压缩 (delayed)

#2. 主要私有Key 存放文件

  • # HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私钥

  • # HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私钥

  • # HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私钥

#3. 关于登录文件的数据与daemon的名称

  • SyslogFacility AUTHPRIV #记录日志/var/log/secure

  • # LogLevel INFO #日志等级

#4. 安全设置

  • # PermitRootLogin yes #是否允许 root 登入

  • # StrictModes yes #是否让 sshd 去检查用户家目录或相关文件的权限数据

  • # PubkeyAuthentication yes #使用密钥登录系统

  • # AuthorizedKeysFile .ssh/authorized_keys #用户登录公钥存放位置

  • PasswordAuthentication yes #登录密码认证

  • # PermitEmptyPasswords no #否允许以空的密码登入

  • # RhostsAuthentication no #系统不使用 .rhosts认证

  • # IgnoreRhosts yes #是否取消使用 ~/.ssh/.rhosts 来做为认证

  • # RhostsRSAAuthentication no #专门给 version 1 用的,使用 rhosts 文件在 /etc/hosts.equiv

  • # HostbasedAuthentication no #上面的项目类似,不过是给 version 2 使用的

  • # IgnoreUserKnownHosts no #是否忽略家目录内的 ~/.ssh/known_hosts

  • ChallengeResponseAuthentication no #允许任何的密码认证

  • UsePAM yes #利用 PAM 管理使用者认证,可以记录与管理

#5. 登录后项目

  • # PrintMotd yes #登入后是否显示出一些信息

  • # PrintLastLog yes #显示上次登入的信息

  • # TCPKeepAlive yes #当达成联机后,服务器会一直传送 TCP 封包给客户端以判断对方式否一直存在联机

  • UsePrivilegeSeparation yes #是否权限较低的程序来提供用户操作

  • MaxStartups 10 #同时允许几个尚未登入的联机画面

  • DenyUsers * #设定受阻止的使用者名称

  • DenyUsers test  #阻止用户

  • DenyGroups test #阻止组