zoukankan      html  css  js  c++  java
  • SSH

    1. ssh概述

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

    2. ssh 主要功能

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

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

    3. ssh 工作原理

    ssh

    • 服务器建立公钥: 每一次启动 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 #阻止组

    #6. SFTP 设定

    • Subsystem sftp /usr/lib/ssh/sftp-server

    • # UseDNS yes #为了要判断客户端来源是正常合法的,因此会使用 DNS 去反查客户端的主机名,不过在内网这项目设定为 no 会让联机达成速度比较快

    7. sftp 讲解  

    (1). 使用方式:sftp root@localhost

    (2). sftp 支持的命令

    针对远程服务器主机 (Server) 的行为

    • 变换目录到 /etc/test 或其他目录        
      cd /etc/test         
      cd PATH

    • 列出目前所在目录下的文件名        
      ls         
      dir

    • 建立目录        
      mkdir directory

    • 删除目录        
      rmdir directory

    • 显示目前所在的目录        
      pwd

    • 更改文件或目录群组        
      chgrp groupname PATH

    • 更改文件或目录拥有者        
      chown username PATH

    • 更改文件或目录的权限        
      chmod 644 PATH         
      其中,644 与权限有关

    • 建立链接文件        
      ln oldname newname

    • 删除文件或目录        
      rm PATH

    • 更改文件或目录名称        
      rename oldname newname

    • 离开远程主机        
      exit (or) bye (or) quit

    • 针对本机 (Client) 的行为(都加上 l, L 的小写 )

    • 变换目录到本机的 PATH 当中        
      lcd PATH

    • 列出目前本机所在目录下的文件名        
      lls

    • 在本机建立目录        
      lmkdir

    • 显示目前所在的本机目录        
      lpwd

    • 针对资料上传/下载的操作

    • 将文件由本机上传到远程主机 put [本机目录或文件] [远程]        
      put [本机目录或文件]         
      如果是这种格式,则文件会放置到目前远程主机的目录下

    • 将文件由远程主机下载回来 get [远程主机目录或文件] [本机]        
      get [远程主机目录或文件]         
      若是这种格式,则文件会放置在目前本机所在的目录当中!可以使用通配符,例如:         
      get *         
      get *.rpm

    8. 远程文件直接复制 scp

    1
    2
    scp [-pr] [-l 速率] file [账号@]主机:目录名  #上传
    scp [-pr] [-l 速率] [账号@]主机:file 目录名  #下载

    选项与参数:

    1
    2
    3
    -p :保留原来文件的权限数据
    -r :复制来源为目录时,可以复制整个目录 (含子目录)
    -l :可以限制传输的速度,单位为 Kbits/s ,例如 [-l 800] 代表传输速限 100Kbytes/s

    案例:

    1
    2
    scp /etc/hosts* root @127.0.0.1 :~ #上传
    scp root@127.0.0.1:/etc/bashrc /tmp #下载

    9. ssh的认证方式

    基于口令的认证:这个就不用说了,就是输入用户名和密码

    基于密钥的认证,具体步骤如下

    (1).客户端建立两把钥匙(公钥与私钥)

    1
    2
    3
    4
    5
    6
    ssh-keygen [-t rsa|dsa] #可选 rsa 或 dsa
    [root@localhost ~]# ssh-keygen #默认算法
    [root@localhost ~]# ls -l .ssh/  
    total 8   
    -rw------- 1 root root 1675 May 27 03:05 id_rsa   
    -rw-r--r-- 1 root root  408 May 27 03:05 id_rsa.pub

    (2).将公钥数据上传到服务器上

    scp ~/.ssh/id_rsa.pub root@192.168.1.254:~ #上传到 root 的家目录底下即可

    (3).将公钥放置服务器端的正确目录与文件名(scp 或 ssh-copy-id)

    方法一 scp

    • 建立 ~/.ssh 文件,注意权限需要为 700

    • mkdir .ssh ; chmod 700 .ssh #权限设定中,务必是 700 且属于使用者本人的账号与群组才行

    • 将公钥内的数据使用 cat 转存到 authorized_keys 内

    • cat id_rsa.pub >> .ssh/authorized_keys

    • chmod 644 .ssh/authorized_keys #这个档案的权限设定中,就得要是 644 才可以

    方法二 ssh-copy-id

    命令格式:ssh-copy-id –i /path/to/pubkey USERNAME@ERMOTE_HOST

    案例:

    ssh-copy-id –i .ssh/id_rsa.pub root@192.168.1.254

    10. sshd 管理细则

    • 密码应该经常换且足够复杂

    • 非默认端口登录

    • 限制登录用户地址

    • 禁止管理员直接登录

    • 仅允许有限制用户登录

    • 使用基于密钥的认证禁止使用版本1

      • 禁止使用版本1

      https://my.oschina.net/liting/blog/372490 

     单向非对称加密:

    第二种级别(基于密钥的安全验证):你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私钥在本地解密再把它发送给服务器完成登录。与第一种级别相比,第二种级别不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。
    ————————————————

  • 相关阅读:
    SQL中的union和union all区别(转)
    Atitit 学校模式之 天堂模式 目录 1.1. 宗旨,让学生们乐不思蜀 打造人间天堂 2 2. 组织结构 2 2.1. 娱乐事业部 2 2.2. 文艺事业部 2 2.3. 三大金山挖掘(教育 医
    Atitit json序列化工具 JsonParserAtiver 参考 Atitit json序列化原理 序列化是将一个对象变成json格式的字符串,而反序列化是将json格式的字符串变
    Atitit 院系和专业规划 大学里的院系,院一般指的都是学院,比如管理学院、法学院这种,系指的就是院里面的专业,比如中文系、哲学系这种。 中文系、哲学系 土木工程 目录 1. 经济管理学院 2
    目录 1.1. Vue是什么??客户端mvc框架,,功能类似springmvc 1 1.2. Why?为什么使用它?? 1 1.3. 包括哪些组件与内部构成与原理 1 2. Howto 怎么使用 2
    Atitit soa之道 艾提拉著作 SOA概念、技术与设计读书笔记 第3章 理解面向服务 10 第4章 理解面向服务架构 39 第5章 理解服务与微服务的层次 74 第6章 Web服务及微服务的
    Atitit table的读取解析from html by jsoup java html paresr 目录 1. atitit.gui控件的定位与选择器 1 2. 读取表格流程 遍历表格ta
    爬虫的一些知识点 目录 1. 网络爬虫 1 2. 产生背景 垂直领域搜索引擎 2 3. 1 聚焦爬虫工作原理以及关键技术概述 3 4. 涉及技术 3 4.1. 下载网页 一般是通过net api
    《数据算法:Hadoop_Spark大数据处理技巧》艾提拉笔记.docx 第1章二次排序:简介 19 第2章二次排序:详细示例 42 第3章 Top 10 列表 54 第4章左外连接 96 第5
    Atitit 算法原理与导论 目录 1. Attilax总结的有用算法 按用途分类 1 1.1. 排序算法 字符串匹配(String Matching) 1 1.2. 加密算法 编码算法 序列
  • 原文地址:https://www.cnblogs.com/levin180425/p/12328077.html
Copyright © 2011-2022 走看看