SSH 协议与OpenSSH详解

1. ssh概述

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

2. ssh 主要功能

  • 一个就是类似 telnet 的远程联机使用 shell 的服务器,即 ssh
  • 另一个就是类似 FTP 服务的 sftp-server ,提供更安全的 FTP 服务

3. 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 [email protected]:/etc/bashrc /tmp #下载

9. ssh的认证方式

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

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

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


1

2

3

4

5

6

ssh-keygen [-t rsa|dsa] #可选 rsa 或 dsa

[[email protected] ~]# ssh-keygen #默认算法

[[email protected] ~]# 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 [email protected]:~ #上传到 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 [email protected]_HOST

案例:

ssh-copy-id –i .ssh/id_rsa.pub [email protected]

10. sshd 管理细则

  • 密码应该经常换且足够复杂
  • 非默认端口登录
  • 限制登录用户地址
  • 禁止管理员直接登录
  • 仅允许有限制用户登录
  • 使用基于密钥的认证禁止使用版本1
    • 禁止使用版本1
时间: 2024-12-18 01:41:23

SSH 协议与OpenSSH详解的相关文章

SSH框架--struts深入详解(一)

学习了struts,但是对于它的由来,以及为什么使用action和struts.xml的方式而不采用以前的servlet方式,有些疑问,到底之前的方式有什么弊端,struts又给我们带来了什么便利? 下面一一为大家解答! struts的由来: 随着JSP与Servlet 技术大量应用于以Web为基础的应用程序,为了提升Web 应用程序可维护性与重复使用性,Java开发人员提出了一些较佳的开发模式.比较常见的两种JSP应用架构分别为Model1 与Model 2.详情参见(JAVA学习篇--JAV

HTTP协议状态码详解(HTTP Status Code)(转)

原文链接:HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务不可用 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码   说明 100   (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分.  101   (切换协议) 请求者已要

关于HTTP协议头域详解

HTTP1.1 请求头:消息头  Accept:text/html,image/*  告诉服务器,客户机支持的数据类型 Accept-Charset:ISO-8859-1  告诉服务器,客户机采用的编码  Accept-EnCoding:gzip,compress 告诉服务器,客户机支持的数据压缩格式 Accept-Language:en   客户机的语言环境 Host: 客户机告诉服务器,想访问的主机名  If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间  Ref

SSH框架的整合详解

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> SSH框架的整合详解 - super_YC的博客 - 博客频道 - CSDN.NET super_YC的博客 记录我生活的一点一滴!我很开心拥有这样一个自己心事的笔记本 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的P

HTTP协议   状态码详解

http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html#code4xx HTTP协议   状态码详解,布布扣,bubuko.com

http协议之报文详解

用于HTTP协议交互的信息被称为HTTP报文.请求端(客户端)的http报文叫做请求报文,响应端的叫做响应报文. HTTP报文本身是由多行(用CR+LF作为换行符)数据构成的字符串文本. HTTP报文大致可以分为报文首部和报文主体两块.两者由最初出现的空行(CR+LF)来划分.通常,并不一定要有报文主体. 参考: 1. HTTP协议之报文详解 2. 图解http

XMPP 协议工作流程详解

XMPP 要点. 1. 客户端(C) 和服务器端(S) 通过TCP连接5222端口进行全双工通信. 2. XMPP 信息均包含在 XML streams中.一个XMPP会话, 开始于<stream> 标签, 并结束于</stream>标签.所有其他的信息都位于这俩标签之间. 3. 出于安全目的考虑, 开始<stream>之后, 后续的内容会被适度的使用 Transpor Layer Security (TLS) 协商传输 和强制性的 Simple Authenticat

IP实时传输协议RTP/RTCP详解

1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详细介绍IP协议族中用于实时语音.视频数据传输的标准协议RTP( Real-time Transport Protocol)和RTCP(RTP Control Ptotocol)的主要功能. 2.RTP/RTCP协议简介 RTP 由 IETF(www.ietf.org)定义在 RFC 3550和3551中. RTP被定义为传输音频.视频.模拟数据等实时数据的传输协议,与传统的注重的高可靠的数据传

SSH 概念及使用详解

注意:转载请注明出处:http://www.programfish.com/blog/?p=124 SSH 基本概念 SSH 英文全称是secure shell,字面意思:安全的shell. SSH协议由IETF(Internet Engineering Task Force)的Network Working Group所制定,建立在应用层和传输层基础上相对可靠,专为远程登录会话和其他网络服务提供安全性的协议. 说其是Secure的很重要一个原因是ssh会对远程登陆时的认证信息和远程执行的命令进