ssh_ssh2 - CSDN
ssh 订阅
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。 展开全文
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
信息
简    称
SSH
作    用
提供安全性的协议
中文名
安全外壳协议
外文名
Secure Shell
ssh功能
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" [1]  。
收起全文
  • 1.掌握Struts1.x的导包及配置;Struts1.x结合JSP实现视图层的应用;2.掌握Struts2.x的导包及配置;Struts2.x结合JSP实现视图层的应用;3.掌握Hibernate的导包及配置;Hibernate结合JSP实现...5.SSH整合的配置及应用
  • SSH是什么??

    2019-05-22 21:57:53
    首先,SSH是struts+spring+hibernate的一个集成框架,它不是一个框架,而是把多个框架紧密的结合在一起,用于构建灵活的多层Web应用程序。 然后详细说一下组成SSH的这三个框架: Struts 1.什么是Struts?? Struts...
    • 首先,SSH是struts+spring+hibernate的一个集成框架,它不是一个框架,而是把多个框架紧密的结合在一起,用于构建灵活的多层Web应用程序。
    • 然后详细说一下组成SSH的这三个框架:

    Struts
    1.什么是Struts??
    Struts基于MVC的框架,它是通过采用JavaServlet/JSP技术来实现基于Java EEWeb应用的MVC设计模式的应用框架,是MVC的一个具体实现。
    2.Struts的核心构成是什么??在这里插入图片描述

    Struts的核心同样也是MVC的核心,Struts是MVC的一个具体产品。
    

    a.Model
    由Action,ActionForm以及JavaBean组成,其中ActionForm用于将用户请求的参数封装成为ActionForm对象,我们可以理解为实体,由ActionServlet转发给Action,Action处理用户请求,将处理结果返回到界面。
    b.View
    这一部分采用JSP和taglib来实现界面的渲染。
    c.Controller
    Controller是Struts的核心控制器,负责拦截用户请求,通过调用Model来实现处理用户请求的功能。
    3.为什么要使用Struts??
    使用Struts作为系统的整体基础架构,负责MVC的分离,将页面从业务逻辑分离出来,使用页面更加灵活多变,不会影响业务逻辑,简化了基于MVC的web应用程序的开发,使开发更高效。
    Hibernate
    1.什么是Hibernate??
    Hibernate是一个关系映射框架,它对JDBC进行了轻量级的封装,使我们使用面向对象的思想操作关系型数据库。
    2.Hibernate的核心组成??
    在这里插入图片描述
    3.为什么要使用Hibernate??
    a.Hibernate是JDBC的轻量级对象封装,使与关系型数据库打交道更轻松。
    b.对象化,使我们可以以面向对象的思想操作关系型数据库简化了Dao层的编码工作,使开发更对=对象话了。
    c.支持各种数据库,更换数据库简单,不需要改代码。
    Spring
    1.什么是Spring??
    是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。
    2.Spring的核心组成??
    在这里插入图片描述
    a.IOC
    它不是一个技术,是一种设计模式,通过依赖注入的方式,由spring管理和控制对象之间的依赖关系,避免硬编码所造成的过度程序耦合。
    b.AOP
    通过预编译的方式和运行期动态代理实现程序功能的唯一维护的一种技术。
    c.容器
    能管理对象的生命周期,对象与对象之间的依赖关系就是容器。
    3.为什么要使用Spring??
    Spring的核心思想是IOC和AOP,spring使管理对象更加方便,极大的降低了组件之间的耦合度。
    总结
    SSH不仅实现了视图,控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离,系统的灵活性更好,可复用性更高。

    展开全文
  • SSH 详解

    2018-08-08 15:47:01
    SSH服务详解   第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密...

    SSH服务详解

     

    第1章 SSH服务

    1.1 SSH服务协议说明

    SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。

    SSH是专为远程登录会话和其他网络服务提供的安全性协议。利用 SSH 协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境运维工作中,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件,如telnet(23端口,非加密的)等。

    在默认状态下,SSH服务主要提供两个服务功能:

    n 一是提供类似telnet远程联机服务器的服务,即上面提到的SSH服务。

    n 另一个是类似FTP服务的sftp-server,借助SSH协议来传输数据的.提供更安全的SFTP服务(vsftp,proftp)。

    1.1.1 ssh远程连接排错过程

    1.2 SSH加密技术说明

    简单的说,SSH加密技术就是将人类可以看得懂的数据,通过一些特殊的程序算法,把这些数据变成杂乱的无意义的信怠,然后,通过网络进行传输,而当到了目的地后,在通过对应的解密算法,把传过来的加密的数据信怠解密成加密前的可读的正常数据。因此,当数据在互联网上传输时即使被有心的黑客监听窃取了,也很难获取到真正黑要的数据。

    当前,网络上的数据包加密技术一般是通过所谓的一对公钥与私钥(PublickeyandPivatekey)组合成的密钥对进行加密与解密操作。如下图,A-Server要给B_Client传数据,首先会通过本地的公钥加密后再到发到网络上传输。而加密的数据到达B_Client端后,再经由B_Client本地的私钥将加密的数据解密出来。由于在intemet上传输过程中的数据是加密过的,所以,传输的数据内容一般来说是比较安全的。

     

    图1-1 ssh认证连接的过程

    1.2.2 ssh实现安全链接建立,利用要是和锁头

    1. 钥匙=私钥 锁头=公钥,私钥可以解密公钥

    2. 公钥可以再网络中传输,私钥再本地主机保存

    1.2.3 ssh加密算法

    v1漏洞: 密钥不更换

    v2 定期更换密钥

    利用Diffie-Hellman机制定期更新密钥

    1.3 ssh知识要点:

     ssh是安全的加密协议,用于远程链接linux服务器

     ssh 默认端口是22,安全协议版本sshv2,出来2之外还有1(有漏洞)

     ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务

     linux ssh 客户端包括ssh 远程链接命令,以及远程拷贝scp命令

    1.4 SSH服务软件详细说明

    1.4.1 什么是ssh服务

    SSH服务端是一个守护讲程 (daemon).他在后台运行并响应来自客户端的连接请求。 SSH服务端的讲程名为sshd,负责实时监听远程SSH客户端的远程连接请求,并进行处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接等。这个SSH服务就是我们前面基础系统优化中保留开机自启动的服务之。

    ssh客户端包含ssh以及像scp(远程拷贝) slogin(远程登陆) sftp(安全FTP文件传输)等应用程序。

    ssh的工作机制大致是本地的ssh客户端先发送一个连接请求到远程的ssh服务端,服务端检查连接的客户端发送的数据包和IP地址,如果确认合法,就会发送密钥给 SSH的客户端,此时,客户端本地再将密钥发回给服务端,自此连接建立。

    1.4.2 ssh软件安装

    客户端

    [root@nfs01 ~]# rpm -qf `which ssh`

    openssh-clients-5.3p1-122.el6.x86_64

    服务端软件

    [root@nfs01 ~]# rpm -qf `which sshd`

    openssh-server-5.3p1-122.el6.x86_64

    1.4.3 openssh-clinets 软件的主要内容:

    [root@nfs01 ~]# rpm -ql openssh-clients

    /etc/ssh/ssh_config         ---ssh客户端配置文件

    /usr/bin/.ssh.hmac

    /usr/bin/scp                  ---远程复制命令

    /usr/bin/sftp                 ---远程文件传输服务

    /usr/bin/slogin              ---远程登陆命令

    /usr/bin/ssh                  ---ssh远程登陆管理主机

    /usr/bin/ssh-add

    /usr/bin/ssh-agent

    /usr/bin/ssh-copy-id        ---ssh服务分发公钥命令

    /usr/bin/ssh-keyscan

    1.4.4 openssh-server 软件的主要内容

    [root@nfs01 ~]# rpm -ql openssh-server

    /etc/rc.d/init.d/sshd      #ssh服务启动脚本

    /etc/ssh/sshd_config       #ssh服务配置文件

    /etc/sysconfig/sshd        #ssh创建密钥有关

    /usr/sbin/.sshd.hmac       #ssh加密算法有关文件

    /usr/sbin/sshd             #ssh服务进程启动命令

    注意:使用sshd采用绝对路径进行启动

    [root@test ~]# sshd

    sshd re-exec requires execution with an absolute path

    1.5 ssh服务配置文件说明:

    01. 配置文件中所有注释信息,表示默认参数配置

    02. 配置文件中#空格 后面内容表示说明信息

                  #参数 表示配置参数信息

    03. 配置文件参数信息修改后,一旦变为注释,即还原为默认配置

    1.5.1 ssh服务的配置文件路径

    vim  /etc/ssh/sshd_config

    修改SSH服务的运行参数,是通过修改配置文件/etc/ssh/sshd_config实现的。

    一般来说SSH服务使用默认的配置已经能够很好的工作了,如果对安全要求不高,仅仅提供SSH服务的情况,可以不需要修改任何配置。

    1.5.2 配置文件中常用配置说明

    [root@test ~]# vim /etc/ssh/sshd_config

    #       $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $

     

    # This is the sshd server system-wide configuration file.  See

    # sshd_config(5) for more information.

     

    # This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin

     

    # The strategy used for options in the default sshd_config shipped with

    # OpenSSH is to specify options with their default value where

    # possible, but leave them commented.  Uncommented options change a

    # default value.

     

    # OpenSSH is to specify options with their default value where

    # possible, but leave them commented.  Uncommented options change a

    # default value.

     

    Port 25113                   #端口

    ListenAddress 10.0.0.41   #监听地址(本地网卡地址),指定本地网卡那个网卡提供服务

    PermitRootLogin no         #是否允许root用户登陆

    #PermitEmptyPasswords no  #禁止空密码登陆

    #UseDNS no                   #不使用DNS

    GSSAPIAuthentication no    #API认证

    # 连接慢的解决

    #AddressFamily any         #指定监听ipv4地址,或是ipv6地址,或者所有都监听

    配置文件内容说明:

    井号(#)注释的参数信息为默认配置

    井号(#)后面有空格的为描述信息

    井号(#)后面没有空格的为参数信息

    另外:配置文件参数信息修改后,一旦变为注释,即还原为默认配置

    1.5.3 配置文件语法检查方法

    使用sshd -t 命令 对配置文件的语法进行检查

    正确

    [root@backup ~]# sshd -t /etc/ssh/sshd

    Extra argument /etc/ssh/sshd.

    语法格式有错误  ↓

    [root@test ~]# sshd -t /etc/ssh/sshd_config

    /etc/ssh/sshd_config: line 50: Bad configuration option: uthorizedKeysFile

    /etc/ssh/sshd_config: terminating, 1 bad configuration options

    1.5.4 ListenAddress 监听地址的说明

    图1-2 ssh服务监听参数说明

    如图所示,sshd_config配置文件中实际监听本地的网卡,并非网络地址

    监听地址只能监听本地网卡上配置的地址,监听的网卡可以对请求做出相应,为未监听的网卡不响应请求。

    1.5.5 SSH配置文件相关参数详细说明

    命令参数

    参数说明

    Port

    指定sshd进程监听的端口号,默认为22.可以使用多条指令监听多个端口.

    默认将在本机的所有网络接□上监听,但是可以通过ListenAddress指走只在某个特定的接口上监听.

    PermitEmptyPasswords

    是否允许密码为空的用户远程登录.默认为"no"

    PermitRootLogin

    是否允许root登录.可用值如下:"yes"(默认)表示允许."no"表示禁止.

    "without-password"表示禁止使用密码认证登录."forced-commands-only"表示只有在指走了command选项的情况下才允许使用公钥认证登录.同时其它认证方法全部被禁止.这个值常用于做远程备份之类的事情.

    1.多开一个窗口

    2.临时多部署一条连接方式

    3.给普通用户sudo权限

    UseDNS

    指定定sshd是否应该对远程主机名进行反向解折,以检查此主机名是否与其IP地址真实对应.默认值为"yes”.

    ListenAddress

    指定监听并提供服务相应的网卡地址信息

    1.5.6 快速修改配置参数

    sed -i '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no'  /etc/ssh/sshd_config

    1.6 ssh服务认证类型

    01. 基于口令认证方式

    02. 基于密钥认证方式

    1.6.1 基于密码的认证类型

    基于口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH连接帐号和口令(当然也要知道对应服务器的 IP及开放的 SSH端口,默认为22 ),就可以通过 ssh客户端登录到这台远程主机。此时,联机过程中所有传输的数据都是加密的。

    演示了 SecureCR及ssh客户端连接,口令验证的测试。

    [root@test ~]# ssh 10.0.0.250

    The authenticity of host '10.0.0.250 (10.0.0.250)' can't be established.

    RSA key fingerprint is d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c.

    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added '10.0.0.250' (RSA) to the list of known hosts.

    root@10.0.0.250's password:    #需要输入密码

    Last login: Mon Oct 16 21:13:58 2017 from 10.0.0.1

    [root@test ~]#

    1.6.2 基于密钥的安全认证方法

    基于密钥的安全验证方式是指,需要依靠密钥,也就是必须事先建立一对密钥对,然后把公用密钥(锁头)(Public key)放在需要访问的目标服务器上,另外,还需要把私有密钥(钥匙)(Private key)放到SSH的客户端或对应的窖户端服务器上。

    私钥不能在网络中传输---私钥可以解密公钥

    公钥可以再网路中传输---公钥不能解密私钥

    此时,如果要想连接到这个带有公用密钥的SSH服务器,客户端SSH软件或者客户端服务器就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下寻找事先放上去的对应用户的公用密钥,然后把它和连接的SSH客户端发送过来的公用密钥进行比较。如果两个密钥一致,SSH服务器就用公用密钥加密"质询"(challenge)并把它发送给SSH客户端。

    1.7 基于秘钥登录配置

     

    1.7.1 环境准备

    作用

    主机名

    ip

    管理服务器

    m01

    10.0.0.61

    备份服务器

    backup

    10.0.0.41

    存储服务器

    nfs01

    10.0.0.31

    1.7.2 第一个里程碑: 在备份服务器上创建密钥对

    [root@backup ~]# ssh-keygen -t rsa

    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa):   #指定密钥对的保存路径

    Enter passphrase (empty for no passphrase):        #为密钥对创建密码

    Enter same passphrase again:                          #确认为密钥对创建的密码

    Your identification has been saved in /root/.ssh/id_rsa.

    Your public key has been saved in /root/.ssh/id_rsa.pub.

    The key fingerprint is:

    72:48:65:1d:25:69:e1:4c:ae:2b:6f:a5:aa:70:96:1e root@backup

    The key's randomart image is:

    +--[ RSA 2048]----+     #2048表示加密的位数为2048位

    |        o.==.      |

    |       o =+.       |

    |      .  .+        |

    |     . . .         |

    |      o S           |

    |     . o ..        |

    |  . E . .o         |

    |   = . oo           |

    |    o..o.           |

    +-----------------+

    参数说明:

          -t 指定创建密钥对的类型,可以创建的类型如下↓

    Specifies the type of key to create.  The possible values are “rsa1” for protocol version 1 and “dsa”, “ecdsa” or “rsa” for protocol version 2.

    查看创建出来的密钥对:

    [root@backup ssh]# ll ~/.ssh/

    total 12

    -rw------- 1 root root 1675 Oct 18 11:07 id_rsa         #私钥文件

    -rw-r--r-- 1 root root  393 Oct 18 11:07 id_rsa.pub    #公钥文件

    -rw-r--r-- 1 root root  784 Oct 11 16:27 known_hosts

    1.7.3 第二个里程:将公钥分发给存储服务器

    [root@backup ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.31 #用户使用当前用户

    root@172.16.1.31's password:   #注意:首次分发密钥需要输入对端服务器的用户密码

    Now try logging into the machine, with "ssh '172.16.1.31'", and check in:

     

      .ssh/authorized_keys    #公钥分发到对端后进行改名

     

    to make sure we haven't added extra keys that you weren't expecting.

    说明:

       通过 man 手册找到密钥分发的命令格式。

       -i 参数指定 公钥文件的存放位置

    [use@]表示使用的用户,默认使用当前登陆的用户

    [root@backup ~]# man ssh-copy-id

    Formatting page, please wait...

    SSH-COPY-ID(1)                                                  SSH-COPY-ID(1)

    NAME

           ssh-copy-id  -  install  your  public  key in a remote machine's autho-

           rized_keys

    SYNOPSIS

           ssh-copy-id [-i [identity_file]] [user@]machine

    1.7.4 第三个里程碑:进行登录测试

    [root@backup ~]# ssh nfs01

    Last login: Wed Oct 18 10:13:17 2017 from 10.0.0.1

    [root@nfs01 ~]#

    1.8 telnet服务简介

    1.8.1 部署telnet服务

    第一个里程碑:安装telnet服务软件

    [root@test ~]# yum install telnet telnet-server -y

    第二个里程碑:设置开机自启动

    [root@test ~]# vim /etc/xinetd.d/telnet

    修改xinetd下的配置文件,从而管理telnet服务

    [root@test ~]# vim /etc/xinetd.d/telnet
    # default: on
    # description: The telnet server serves telnet sessions; it uses \
    #       unencrypted username/password pairs for authentication.
    service telnet
    {
            flags           = REUSE
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/sbin/in.telnetd
            log_on_failure += USERID
            disable         = no
    }

    第三个里程碑: 启动xinetd 服务,让telnet能够开机自启动

    [root@test ~]# /etc/init.d/xinetd start

    Starting xinetd:                                           [  OK  ]

    1.8.2 客户端测试

    说明:

        telnet服务默认不支持root用户直接登陆。

    [C:\]$ telnet 10.0.0.250

    Connecting to 10.0.0.250:23...

    Connection established.

    To escape to local shell, press 'Ctrl+Alt+]'.

    CentOS release 6.9 (Final)

    Kernel 2.6.32-696.el6.x86_64 on an x86_64

    test login: oldboy

    Password:

    Last login: Wed Oct 18 09:41:19 from 10.0.0.1

    [oldboy@test ~]$

    1.8.3 ssh与telnet区别(对比示意图)

    01.ssh是加密的服务协议,telnet服务是非加密的

    02.ssh服务默认支持root用户登陆,telnet用户默认不支持root用户登陆

     

    1.9 进行免密码scp传输测试

    [root@backup ~]# scp -rp  /etc/hosts nfs01:/tmp/

    hosts                                         100%  357     0.4KB/s   00:00  

    1.9.1 scp的基本语法使用:

    scp - secure copy (remote file copy program)

    每次都是全量拷贝,增量拷贝rsync

    推:PUSH

    scp -P22 -rp /tmp/oldboy oldboy@10.0.0.143:/tmp

    参数说明:

    <- -P(大写,注意和ssh命令的不同)接端口,默认22端口时可以省略-P22;

    <- -r递归,表示拷贝目录;

    <- -p表示在拷贝前后保持文件或目录属性;

    <- -l limit 限制速度。

    <- /tmp/oldboy为本地的目录。“@”前为用户名,“@”后为要连接的服务器的IP。IP后的:/tmp目录,为远端的目标目录。

    说明:

    以上命令作用是把本地/tmp/oldboy拷贝到远端服务器10.0.0.143的/tmp目录;

    拉:PULL

    scp -P22 -rp root@10.0.0.7:/tmp/oldboy /opt/

    说明:

    还可以把远端目录抓到本地

    结论:

    scp为远程拷贝文件或目录的命令,更多用法,请man scp;

    拷贝权限为连接的用户对应的权限。

    1.10 使用sftp进行基于密钥的文件传输

    1.10.1 sftp简介

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分.

    1.10.2 sftp命令说明

    [root@m01 ~]# sftp -oPort=22  172.16.1.31

    Connecting to 172.16.1.31...

    sftp>

    说明:

       -o        连接的时候指定选项

    Port=22  端口指定为22、

    1.10.3 sftp使用参数说明

    操作远程服务器

    ls    显示远端主机的列表

    cd   切换远程的工作目录

    pwd  显示远程的工作目录

    操作本地服务器

    lls   显示本地主机的列表

    lcd   切换本地的工作目录

    lpwd  查看本地目录信息

    上传下载文件参数

    get   --- 表示从远程服务器下载数据(单个文件)

    mget  --- 表示下载多个文件

    put   --- 表示从本地服务器上传数据(单个文件)

    mput  --- 表示上传多个文件

    查看帮助的方式:

    sftp> help       显示帮助信息

    1.11 ssh相关重点知识总结

     ssh协议:sshd---远程连接(sshd),sftp

     为加密的远程连接协议,相关软件有openssh.openssh---https。

     默认端口22

     协议版本1X和2.x,2.x更安全。了解SSH协议原理(ssh连接过程X

     服务端ssh远程连接服务,sftp服务。sshd守护进程,开机要自启动。

     ssh客户端包含ssh,scp,sftp命令。

     ssh安全验证方式:口令和密钥,这两种都是基于口令的,SSH密钥登录的原理。

     ssh服务安全优化,修改默认端口22,禁止root远程连接,禁止dns,SSH只监听内网IP

     ssh密钥对,公钥(publickey)在服务器端,比喻就是锁头,私钥(privatekey)在客户端,比喻就是钥匙。

     

     

     

    第2章 重点知识补充

    2.1 一个服务始终无法启动

    01.服务的查日志/系统日志

    02.检查服务端口有没有冲突

    2.2 【企业面试题】:给你一个端口如何命令行查出对应的服务是什么?

    测试服务端口有没有开启

    ss -lntup|grep 22

    netstat -lntup|grep -w "22"

    lsof -i:22

    grep  "\b22/\b" /etc/services

    nmap -p 22 172.16.1.41

    nc 172.16.1.41 22

    telnet 172.16.1.41 22

    2.2.1 【企业面试题】根据进程名查看对应的端口是什么?

    netstat/ss –lntup|grep 进程或服务名字

    2.3 ssh入侵案例说明

    被入侵实例http://phenixikki.blog.51cto.com/7572938/1546669

    IP何防止SSH登录入侵小结:

    1、用密钥登录,不用密码登陆

    2、牤牛阵法:解决SSH安全问题

    a.防火墙封闭SSH,指定源IP限制(局域网、信任公网)

    b.开启 SSH 只监听本地内网 IP ( ListenAddress 172.16.1.61 )

    3、尽量不给服务器外网ip

    4、最小化(软件安装-授权)

    5、给系统的重要文件或命令做一个指纹

    6、给他锁上 chattr +i +a

    第3章 扩展问题

    3.1 服务端端口号变化了,如何基于秘钥连接

    3.1.1 环境准备

    实验环境:

    [root@test ~]# cat /etc/redhat-release

    CentOS release 6.9 (Final)

    将一台服务器的ssh服务端口修改为63389

    [root@test ~]# netstat -lntup|grep sshd

    tcp        0      0 0.0.0.0:63389  0.0.0.0:*         LISTEN      5083/sshd          

    tcp        0      0 :::63389         :::*              LISTEN      5083/sshd   

    3.1.2 通过另外一台服务器创建并分发密钥

    第一个里程碑: 现创建密钥使用 ssh-keygen

    [root@backup ~]# ssh-keygen -t rsa

    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa):   #指定密钥对的保存路径

    Enter passphrase (empty for no passphrase):        #为密钥对创建密码

    Enter same passphrase again:                          #确认为密钥对创建的密码

    Your identification has been saved in /root/.ssh/id_rsa.

    Your public key has been saved in /root/.ssh/id_rsa.pub.

    The key fingerprint is:

    72:48:65:1d:25:69:e1:4c:ae:2b:6f:a5:aa:70:96:1e root@backup

    The key's randomart image is:

    +--[ RSA 2048]----+     #2048表示加密的位数为2048位

    |        o.==.      |

    |       o =+.       |

    |      .  .+        |

    |     . . .         |

    |      o S           |

    |     . o ..        |

    |  . E . .o         |

    |   = . oo           |

    |    o..o.           |

    +-----------------+

    第二个里程碑:分发密钥,注意ssh的端口

    [root@backup ~]# ssh-copy-id  -i ~/.ssh/id_rsa.pub "-p63389 172.16.1.250"

    The authenticity of host '[172.16.1.250]:63389 ([172.16.1.250]:63389)' can't be established.

    RSA key fingerprint is d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c.

    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added '[172.16.1.250]:63389' (RSA) to the list of known hosts.

    root@172.16.1.250's password:

    Now try logging into the machine, with "ssh '-p63389 172.16.1.250'", and check in:

     

      .ssh/authorized_keys   #分发到对端服务器后进行改名

     

    to make sure we haven't added extra keys that you weren't expecting.

    说明:

       通过 man 手册找到密钥分发的命令格式。

       -i 参数指定 公钥文件的存放位置

    [use@]表示使用的用户,默认使用当前登陆的用户

    -p 指定端口,主要要在双引号之间(通过cat `which ssh-copy-id` 命令脚本内容得知)

    [root@backup ~]# man ssh-copy-id

    Formatting page, please wait...

    SSH-COPY-ID(1)                                                  SSH-COPY-ID(1)

    NAME

           ssh-copy-id  -  install  your  public  key in a remote machine's autho-

           rized_keys

    SYNOPSIS

    第三个里程碑: 测试密钥登陆

    [root@backup ~]# ssh 172.16.1.250 -p 63389

    Last login: Wed Oct 18 15:42:05 2017 from 10.0.0.41

    [root@test ~]#

    3.2 如何实现自动创建秘钥对,同时分发公钥(编写脚本实现)

    脚本内容:

    [root@m01 ~]# vim /server/scripts/piliang_fenfa.sh
      1 #!/bin/bash
      2
      3 #make key
      4 \rm -f /root/.ssh/id_dsa
      5 ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q
      6
      7 #fengfagongyao
      8 for ip in 8 31 41
      9 do
     10 echo ====fenfa key to host 172.16.1.$ip====
     11 sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.$ip"
     12 echo ===============fenfa end==============
     13 echo ""
     14 done

    脚本说明:

       ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q

       创建密钥,-f指定存放位置,-P 密钥加密的密码  -q 减少信息输出

    sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.$ip"

       这里需要安装一个软件 yum install sshpass -y 用来提供中户密码

    ssh-copy-id 命令来分发密钥 -i 指定密钥本地存放的路径

    -o StrictHostKeyChecking=no 在登陆其他服务器是不选择yes/no

    for ip in 8 31 41

       这里使用for循环来对ip地址进行变化。

    展开全文
  • 传统的SSH教学,存在着很大的问题。尤其是Spring整合Struts2道理何在? Spring整合Hibernate是好是坏? 本教程采用完全案例教学模式,通过深刻剖析,提出了与传统模式完全不同的更佳解决方案!
  • SSH的安全机制 SSH的安装 启动服务器的SSH服务 SSH两种级别的远程登录 SSH的高级应用 Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为...

    目录

    SSH的安全机制

    SSH的安装

    启动服务器的SSH服务

    SSH两种级别的远程登录

    SSH的高级应用


    Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。

    SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文主要介绍OpenSSH免费开源实现在Ubuntu中的应用,如果要在Windows中使用SSH,需要使用另一个软件PuTTY。

    SSH的安全机制

    SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。

    传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。

    但并不是说SSH就是绝对安全的,因为它本身提供两种级别的验证方法:

    第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人攻击”这种方式的攻击。

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

    SSH的安装

    SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑上是否安装了客户端和服务器。

    dpkg -l | grep ssh

    如果只是想远程登陆别的机器只需要安装客户端(Ubuntu默认安装了客户端),如果要开放本机的SSH服务就需要安装服务器。

    sudo apt-get install openssh-client 
    sudo apt-get install openssh-server 

    启动服务器的SSH服务

    首先确认ssh-server是否已经启动了

    ps -e | grep ssh

    如图,sshd 表示ssh-server已经启动了。如果没有启动,可以使用如下命令启动:

    sudo /etc/init.d/ssh start 

    停止和重启ssh服务的命令如下:

    sudo /etc/init.d/ssh stop  #server停止ssh服务 
    sudo /etc/init.d/ssh restart  #server重启ssh服务
    

    接下来就可以进行使用客户机远程登录服务器了~

    SSH两种级别的远程登录

    一、口令登录

    口令登录非常简单,只需要一条命令,命令格式为: ssh 客户端用户名@服务器ip地址  eg:

    ssh ldz@192.168.0.1

    如果需要调用图形界面程序可以使用 -X 选项

    ssh -X ldz@192.168.0.1

    如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名。

    ssh 192.168.0.1

    还要说明的是,SSH服务的默认端口是22,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号,比如连接到服务器的1234端口:

    ssh -p 1234 ldz@192.168.0.1

    客户机必须要知道服务器的ip地址。可以在服务器端电脑上利用 ifconfig 命令查看该机的ip地址:

    如果是第一次登录远程主机,系统会给出下面提示:

    意思是,该远程主机的真实性无法确定,其公钥指纹为 SHA256:FFobshqrGOachj7Xp4LsJ9+xkNBlyyOe8ZIPl7K+qQI,确定想要继续连接吗?

    输入yes即可。这时系统会提示远程主机被添加到已知主机列表。

     

    然后会要求我们输入远程主机的密码,输入的密码正确就可以成功登录了。命令提示符会修改为远程主机的提示符,现在开始,终端中输入的命令都将在服务器中执行。

    我们可以通过 Ctrl+D 或者 exit 命令退出远程登录

     

    二、公钥登录

    每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性。

    1、在本机生成密钥对

    使用ssh-keygen命令生成密钥对:

    ssh-keygen -t rsa   #-t表示类型选项,这里采用rsa加密算法

    然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下),执行结束以后会在 /home/当前用户 目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa公钥文件 id_rsa.pub

    2、将公钥复制到远程主机中

    使用ssh-copy-id命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ .ssh/authorized_key 文件中

    ssh-copy-id ldz@192.168.0.1

    经过以上两个步骤,以后再登录这个远程主机就不用再输入密码了。

    cheers~

     

    SSH的高级应用

    使用远程主机不中断的跑程序

    当我们利用ssh在远程主机上跑程序的时候,只要关闭了终端就会中断ssh连接,然后远程主机上正在跑的程序或者服务就会自动停止运行。我们可以利用 nohup + 需要运行的程序 使运行的程序在切断ssh连接的时候仍然能够继续在远程主机中运行。nohup即no hang up(不挂起)。

    除此之外还有很多远程操作应用,包括 数据传输、端口操作(将不加密的网络连接绑定到ssh端口实现间接加密) 等等,可以参考柚子皮大神的博客:https://blog.csdn.net/pipisorry/article/details/52269785

     

     

     

    展开全文
  • linux下安装SSH服务及使用详解 ssh服务介绍说明 secure shell protocol简称SSH,是由IETF网络工作小组(network working group) 制定,在进行数据传输之前,SSH先对联级数据包通过加密技术进行加密处理,加密后在进行数据...

    linux下安装SSH服务及使用详解

    ssh服务介绍说明

    secure shell protocol简称SSH,是由IETF网络工作小组(network working group) 制定,在进行数据传输之前,SSH先对联级数据包通过加密技术进行加密处理,加密后在进行数据传输,确保了传递的数据安全.
    SSH是专门为远程登录会话和其他网络服务(例如:rsync,ansible)提供的安全性协议,利用SSH协议可以有效的防止远程管理过程中的信息泄露问题,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程连接服务器软件(例如:Telnet/23端口/非加密的)等.

    • 在默认状态下,SSH服务主要提供两个服务功能:
    1. 提供类似Telnet远程连接服务器的服务,即上面提到的SSH服务(具有数据加密功能)
    2. 另一个是类似FTP服务的sftp-server,借助SSH协议来传输数据,提供更安全的SFTP服务(vsftp,proftp).

    说明
    ssh客户端(ssh命令)还包含着一个很有用的远程安全拷贝命令scp也是通过ssh协议工作的!

    • openssh是SSH服务端软件之一,可同时支持SSH1和SSH2版本协议,可以在配置文件中使用protocol指令,指定只支持其中一种或者两种都支持,默认情况下系统默认配置的是仅支持SSH2协议

    ssh服务连接排错

    • 检查链路是否通畅
    #客户端
    ping + 服务器ip地址
    
    #客户端
    traceroute/tracert ip地址
    
    • 检查防火墙是否阻止链路通讯
    #由于防火墙存在可能一次关闭不上的问题,需要多执行几遍关闭命令
    /etc/init.d/iptables stop
    
    • 查看是否有服务提供网络连接

    测试服务端口有没有开启多个方法

    #Telnet命令
    telnet 10.0.0.21 22
    
    #ss命令
    ss -lntup|grep 22
    
    #netstat命令
    netstat -lntup|grep 22
    
    #nmap命令
    nmap -p 22 10.0.0.21
    
    #nc命令
    nc 10.0.0.21 22
    
    
    • 一个服务始终无法启动起来
    1. 查看日志
    2. 检查服务端口是否有冲突

    在启动服务之前,这个服务的端口就被其他服务占用了,可以更改服务启动端口,在线上环境遇到后,不要随便就kill掉这个端口

    远程登录服务对比

    • 配置Telnet远程连接服务
    1. 安装telnet服务软件
    yum -y install telnet telnet-server
    
    • 配置xinnetd服务目录中的telnet文件,让telnet服务允许被xinetd服务管理

    说明
    (1)telnet是没有自己的服务启动脚本的,例如无法使用:/etc/init.d
    (2)所以需要借助xinetd服务(超级守护进程),让telenet服务允许被xinetd服务管理

    #如果没有安装xinetd服务yum安装即可
    yum -y install xinetd
    
    #vim编辑xinetd.d目录下面服务对应的配置文件,这里的服务是telnet就编辑telnet文件
    vim  /etc/xinetd.d/telnet
    service telnet
    {
            flags           = REUSE
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/sbin/in.telnetd
            log_on_failure  += USERID
            disable         = no #把这里的yes改成no,yes表示不允许,no表示允许被管理
    }
    
    • 启动xinetd服务
    #启动服务
    #centos7.x是用systemctl
    systemctl start xinetd.service
    
    #centos6.x
    /etc/init.d/xinetdw restart
    
    #查看是否启动起来
    ps -ef|grep xinetd
    root      33095      1  0 16:27 ?        00:00:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
    
    #查看telnet是否由xinetd服务启动起来
    ss -lntup|grep 23
    tcp    LISTEN     0      64       :::23                   :::*                   users:(("xinetd",pid=33362,fd=5))
    
    • SSH远程连接服务与telnet服务区别
    1. SSH服务是加密服务协议,telnet服务是非加密服务协议
    2. SSH服务默认支持root用户登录,telnet服务默认不支持root用户登录

    由于不支持root用户登录,所以要建立一个普通用户设置密码后进行登录

    #登录测试
    [D:\~]$ telnet 10.0.0.11
    Connecting to 10.0.0.11:23...
    Connection established.
    To escape to local shell, press 'Ctrl+Alt+]'.
    
    Kernel 3.10.0-862.el7.x86_64 on an x86_64
    ansible-1 login: shuai
    # Password:   #输入密码是看不到的,尽管输入即可
    

    验证SSH和telnet服务安全性

    验证telnet是否明文传输数据

    1. 开抓包工具,这里用的工具是Wireshark

    2. 过滤telnet包

    3. 进行telnet连接服务器
      在命令行输入

    telnet 10.0.0.11
    

    1. Wireshark中找到的数据包显示和连接登录时是相同的

    然后开始输入用户名

    1. 为了方便查看,我们找到开始显示登录用户名的这条数据包

    右击选中追踪流,在右侧再选中TCP流

    即可显示数据包的全过程,圈中的部分是用户名,之所以每个单词重复出现,是因为数据有请求,有确认,所以会重复,去重以后就是用户名:shuai,密码:123456

    说明
    由此可以验证telnet传输数据是明文传输的,所以不太安全!

    验证SSH服务传输数据是否加密

    • 使用同样的做法,选择过来ssh数据包,然后在连接软件上进行ssh方式连接

    • 接收到数据包后使用选择追踪流,在选择TCP流

    说明
    追踪流中我们可以看到所有的信息都是加密显示的,可以看做是一堆乱码,根本找不到规律,破解出你用户和密码信息来,所以ssh比起telnet服务要安全的多!

    • 连接登录过程中发生了什么?

    在显示yes/no的时候,如果输入的yes就接收到了服务端发送过来的公钥信息,把这个信息放到了/root/.ssh/known_hosts文件

    SSH知识要点总结

    • SSH是安全的加密协议,用于远程连接linux服务器
    • SSH默认端口是22号端口,安全协议版本SSHv2,出了SSHv2版本之外还有SSHv1版本(有漏洞,不安全)
    • SSH服务端主要包含两个服务功能SSH远程连接和SFTP服务
    • Linux SSH客户端包含SSH远程连接命令,已经远程拷贝scp命令等!

    SSH服务详解说明

    SSH服务由服务端软件OpenSSH(Openssl)和客户端常见的有SSH(linux),secureCRT,putty,Xshell组成.SSH服务默认使用22端口提供服务,他有两个不兼容的SSH协议版本,分别是1.x和2.x

    • 默认SSH软件不能直接安装
    yum install -y ssh
    No package ssh available.
    Error: Nothing to do
    

    获取SSH服务的软件包

    rpm -qf `which ssh`
    openssh-clients-7.4p1-16.el7.x86_64
    

    SSH服务软件命令知识

    • openssh-clients客户端软件信息
    rpm -ql openssh-clients
    
    /etc/ssh/ssh_config   #ssh客户端配置文件
    /usr/bin/scp		  #远程复制命令
    /usr/bin/sftp		  #远程文件传输服务
    /usr/bin/slogin       #远程登录命令
    /usr/bin/ssh          #SSH远程登录管理主机命令
    /usr/bin/ssh-add
    /usr/bin/ssh-agent
    /usr/bin/ssh-copy-id  #SSH服务分发公钥命令
    /usr/bin/ssh-keyscan
    
    1. /usr/bin/slogin(远程登录命令使用方法)
    • openssh-server服务端软件信息
    root@ansible-2:~#:rpm -ql openssh-server
    /etc/rc.d/init.d/sshd    #ssh服务启动脚本
    /etc/ssh/sshd_config     #ssh服务配置文件信息
    /usr/sbin/sshd           #ssh服务守护进程命令
    ~/.ssh/known_hosts       #记录公钥的文件
    
    1. /usr/sbin/sshd:守护进程命令
      可以直接使用此命令启动ssh服务

    注意
    使用此命令需要绝对路径

    /usr/sbin/sshd
    
    1. 查看sshd进程

    说明
    (1)箭头所指的是ssh真实的进程
    (2)箭头下面一条是连接进来的用户,把这个用户kill掉后会导致断开链接
    (3)把SSHD主进程kill掉后,不会导致已连接用户断线,会保留此用户在里面,直到此用户主动断开链接,但是SSHD主进程断掉后其他用户不能再连接进此系统

    known_hosts 文件引起的报错问题及解决

    1. ~/.ssh/known_hosts文件使用说明

    ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。

    如果在进行连接的时候出现以下情况,如何解决

    解决方案:

    1. 手动删除修改known_hsots里面的内容;
    2. 修改配置文件“~/.ssh/config”,加上这两行,重启服务器。
      StrictHostKeyChecking no
      UserKnownHostsFile /dev/null

    优缺点:

    1. 需要每次手动删除文件内容,一些自动化脚本的无法运行(在SSH登陆时失败),但是安全性高;
    2. SSH登陆时会忽略known_hsots的访问,但是安全性低;

    获取OpenSSL包含的软件包信息

    rpm -qa|grep openssh
    openssh-clients-7.4p1-16.el7.x86_64
    openssh-server-7.4p1-16.el7.x86_64
    openssh-7.4p1-16.el7.x86_64
    

    说明
    SSH服务端是一个守护进程(daemon),它在后台运行并响应来自客户端的连接请求,SSH服务端进程名为sshd,负责实时监听远程,SSH客户端的远程连接请求,并进行处理,一般包括公共密钥认证,密钥交换,对称密钥和非安全连接等.SSH服务一般都要保持开机自启

    SSH加密技术说明

    • ssh服务实现连接安全连接建立,利用"钥匙"和"锁头":
    1. 钥匙=私钥 锁头=公钥
    2. 私钥不能在网络中传输------私钥可以解密公钥(钥匙可以开启锁头)
      公钥可以在网络中传输------公钥不能解密私钥

    SSH服务认证类型

    (1)基于密码/口令安全验证

    基于口令的安全验证方式就是知道服务器的SSH连接账号和口令(也要知道对应服务器的IP地址及开放的SSH端口,默认为22端口)就可以通过SSH客户端登录到远程主机上面,此时联机过程中所有传输的数据都是加密的!
     - 演示XSHELL及SSH客户端连接,口令验证测试

    #方法一
    ssh -p22 root@10.0.0.11
    ## Heading
    #方法二
    ssh 10.0.0.11
    

    (2)基于密钥(钥匙锁头)的安全验证

    基于密钥的安全验证方式是指,需要依靠密钥,也就是必须事先建立一对密钥对,然后把公用密钥(锁头:public key)放在需要访问的目标服务器上,另外,还需要把私有密钥(钥匙:private key)放到SSH的客户端或对应的客户端服务器上.
     此时,如果想要连接到这个带有公用密钥的SSH服务器上,客户端SSH软件或者客户端服务器就会向SSH服务器发出请求,请用联机的用户密钥进行安全验证,SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下面寻找事先放上去的对应用户的公用密钥,然后把它和连接SSH客户端发送过来的公用密钥进行比较,如果两个密钥一直,SSH服务器就用公用密钥加密"质询(challenge)"并把它发送给SSH客户端!
     SSH客户端收到"质询"之后就可以用自己的私钥解密,在把它发送给SSH服务器,使用这种方式,需要知道联机用户的密钥文件,与第一种基于口令验证的方式相比,第二种方式不需要在网络上传送口令密码,所以安全性更高了,这是我们也注意保护我们的密钥文件,特别是私钥文件,一旦被黑获取到,危险系数增大很多.

    SSH配置文件(重要)

    SSH配置文件默认路径信息

    • SSHD服务配置文件
    ls -l  /etc/ssh/sshd_config
    -rw-------. 1 root root 3907 Apr 11  2018 /etc/ssh/sshd_config
    
    • 在编辑sshd_config配置文件之前先备份

    养成良好的习惯是对自己和公司负责任,备份重要的配置文件防止不当操作

    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
    

    SSH配置文件修改-默认登录参数

    修改SSH服务的运行参数,是通过修改配置文件/etc/ssh/sshd_config来实现的.
     一般来说SSH服务使用默认的配置已经能够很好的工作了,如果对安全要求不高,仅仅提供SSH服务的情况,可以不需要修改任何参数配置.

    • 下面提供一下平常企业中SSH服务配置参数
    vim /etc/ssh/sshd_config
    Port 52117               #SSH连接默认端口为22,为提高安全性改成0-1024以外的端口号(0-1024很多知名服务已经占用,用了有可能冲突)
    PermitRootLogin no       #禁止root用户远程登录,只能使用普通用户登录后切换到root
    PermitEmptyPasswords no  #禁止空密码登录
    UseDNS  no               #不使用DNS域名解析.打开会导致连接慢,(在连接的时候会反向解析,根据IP地址解析出主机名,没有意义!)
    GSSAPIAuthentication no  #关闭GSSAPI认证,每次连接都会认证,在内网使用没必要打开次认证
    
    #备份配置文件
    cp /etc/ssh/sshd_config{,.bak}
    
    #利用sed在最后添加一下内容,再备份原有信息
    sed -i.ori.20190101 '$ aPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS  no \nGSSAPIAuthentication no' /etc/ssh/sshd_config
    
    • 打开编辑sshd_config配置文件
    vim /etc/ssh/sshd_config
    

    说明:

    (1)为什么这里的注释有带空格有不带空格的?
    "#"注释后面带空格表示后面的是描述信息
    "#"注释后面不带空格表示后面的是相关参数信息,也是默认参数配置信息
    (2)在更改配置文件时,多开几个连接窗口,方式更改错误后关闭窗口连接不进去的情况

    • 配置文件:ListenAddress:监听地址说明
    #vim编辑sshd_config配置文件
    vim /etc/ssh/sshd_config
    
    #找到以下两行参数
    #ListenAddress 0.0.0.0
    #ListenAddress ::
    
    #修改参数
    ListenAddress 10.0.0.0  #监听10.0.0.0网段
    
    #重启sshd服务
    systemctl restart sshd
    
    #查看监听地址是否改变
    ss -lntup |grep sshd
    tcp    LISTEN     0      128    10.0.0.0:22                    *:*                   users:(("ssh",pid=70311,fd=3))
    
    

    SSH服务监听参数说明

    SSH服务入侵防范

    企业服务器被入侵案例

    • 如何防止SSH登录入侵小结
    1. 用密钥登录,不用密码登录
    2. 防火墙封闭SSH,指定源IP限制(局域网,信任公网)
      开启SSH只监听本地内网IP(例如:ListenAddress 172.16.1.31)
    3. 尽量不给服务器外网IP
    4. 最小化(软件安装-授权-有用的装没用的不装)
    5. 给系统重要文件或者命令做一个指纹(编写一个脚本,实时监控文件的指纹是否变动,如果变动立即发送邮件进行告警!)

    SSH服务相关命令用法

    • ssh基本语法使用
    1. ssh远程登录命令
    ssh -p22 root@10.0.0.11
    #-p(小写)接端口号,默认端口号是22
    #" "@" " 前面是用户名,也可以不指定用户名
             后面是要连接的IP地址
    
    #端口改变的情况怎么连接
    ssh -p(更改的端口号) (用户)@(IP地址)
    

    报错说明
    (1)如果端口修改了,直接连接后会提示
    ssh: connect to host 10.0.0.11 port 22 : Connection refused
    (2)报错字符串对应的可能存在的问题
    no route to host #可能是防火墙引起的
    Connection refused #可能是防火墙引起的
    Connection refused #还可能是连接的对端服务没开或者端口改变引起的

    1. SSH远程连接方式-windows客户端连接
      windows下实现远程连接的软件一般有SecureCRT,putty,xshell等工具
      连接远程桌面的工具有VNC,MobaXterm等工具
      这里我使用的是XSHell连接工具
    • scp远程复制数据命令
      推送:PUSH
    scp -P22 -rp /tmp/shuai.txt geek@10.0.0.21:/tmp
    
    #-P(大写) 接端口号
    #-r递归,表示拷贝目录
    #-p(小写)表示拷贝前后保持文件或目录的属性
    #-l limit 限制速度,在传输大量文件的时候用是此参数可以减少带宽占用,防止因为大量占用带宽导致网络延迟增大
    # /tmp/shuai.txt为本地目录文件,"用户名"@"目标IP地址":(远端主机目标目录)
    

    拉取:PULL

    scp -P22 -rp root@10.0.0.11:/tmp/shuai.txt    /opt
    
    #还可以把远端目录拉取到本地
    

    SSH服务远程命令-sftp命令

    • windows客户端和linux服务端之间传输数据工具
    1. rz/sz(lrzsz)

    2. winscp WinSCP-v4.0.5 基于SSH,sftp

    3. XFTP(XSHELL windows工具)

    4. SFTP 基于SSH加密传输,linux命令


    • FTP工具
    1. vsftp
    2. proftp
    3. SFTP

    • sftp数据传输命令
    1. 进行目标服务器连接
    sftp -oPort=22 root@10.0.0.21
    
    root@10.0.0.21's password:   #输入密码
    Connected to 10.0.0.21.
    sftp>   #进入到操作阶段,可以在这里输入操作指令
    
    1. 连接成功后如何进行命令操作
    sftp>   help 显示帮助信息
    		cd   切换远程目录路径
    		ls   显示远端主机目录文件列表
    		lls  显示本地
    		pwd  查看远端工作目录信息
    		lpwd 查看本地
    		rm   删除文件
    		put /tmp/ssscp.txt    /tmp/     上传文件到远端服务器
    		get /tmp/ssscp.txt    /opt/      远程文件下载到本地
    		#上传/下载可以不接目录,注意切换目录位置,或者自己接参数说明文件在那个位置
    

    说明
    只要想查看本地的东西在命令前面加一个l即可!

    SSH重点知识小结

    • SSH协议:sshd–远程连接(sshd),sftp
    • 为加密的远程连接协议,先关软件有openssh,openssl—https
    • 默认端口22
    • 协议版本分为v1.x/v2.x, v2.x最为安全,了解SSH协议原理(ssh连接过程)
    • 服务SSH远程连接服务,SFTP服务,sshd守护进程,开机要自启
    • SSH客户端包好ssh,scp,sftp命令
    • ssh安全验证方式:口令和密钥,这两种都是基于口令的,sshd密钥登录的原理
    • ssh安全优化,修改端口号,禁止root用户远程连接,机制dns,ssh只监听内网
    • ssh密钥对,公钥(public key)在服务端,比喻就是锁头,私钥(private key)在客户端比喻就是钥匙!
    展开全文
  • ssh命令详解

    2019-06-22 00:30:52
    SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。 ssh服务端由2部分组成: ...
  • SSH是一种通讯协议,可以实现远程安全登录。可以通过如putty、MobaXterm等工具通过ssh安全登录到虚拟机进行操作。 Openssh:ssh远程安全登录的开源实现(软件)。 一、SSH远程登录的原理(基于口令) 1、客户端向...
  • 最近在使用云服务器的时候...第一部分是关于ssh的使用以及原理的,这里引用了博主:疲惫的豆豆http://www.cnblogs.com/dzblog/p/6930147.html。这一篇讲得比较通俗易懂。也易于上手操作。一、明白的以下几个概念:k...
  • 什么是SSH?简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候...
  • ssh用法及命令

    2019-08-13 15:10:18
    什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的...
  • ssh详解

    2018-09-19 13:15:07
    本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机。 另外,作者翻译了ssh客户端命令的man文档,如...
  • 这时候就需要SSH了。搬瓦工自带SSH服务端,因此这里只需要配置客户端就可以了。默认配置Windows下有很多SSH工具。在这里我是用的是Putty。如果安装了Git并配置使用Putty的话,就不需要另外在安装Putty了。使用SSH...
  • 1.查看ssh服务的状态 输入以下命令: sudo service sshd status 如果出现 Loaded: error (Reason: No such file or directory) 提示的话,说名没有安装ssh服务,按照第二步:安装ssh服务。 如果...
  • ssh-keygen的使用方法

    2011-04-21 15:30:00
    采用了数字签名RSA或者DSA来完成这个操作2、模型分析假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机; ...2、ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_r
  • ssh–secure shell,提供安全的远程登录。从事嵌入式开发搭建linux开发环境中,ssh的服务的安装是其中必不可少的一步。ssh方便一个开发小组中人员登录一台服务器,从事代码的编写、编译、运行。方便代码的共享及管理...
  • SSH是建立在应用层和传输层基础上的安全协议,其目的是专为远程登录会话和其他网络服务提供安全性的保障,用过SSH远程登录的人都比较熟悉,可以认为SSH是一种安全的Shell。SSH登录是需要用户名和密码的,要实现无...
  • 我们知道SSH登录是用的RSA非对称加密的,所以我们在SSH登录的时候就可以使用RSA密钥登录,SSH有专门创建SSH密钥的工具ssh-keygen,下面就来一睹风采。 首先进入Linux系统的用户目录下的.ssh目录下,root用户是/root...
  • Linux:SSH免密码登录

    2017-08-31 15:03:31
    我相信用过ssh连接linux服务器的人都知道,要连上Linux服务器,都要输入一大串的命令,先是ssh -p 端口号 用户名@IP地址 然后再输入密码才能进入远程linux服务器,是不是感觉特别烦躁,也特别繁琐,下面我来... ssh-ke
  • Git SSH Key 生成步骤

    2014-07-02 17:02:23
    it是分布式的代码管理工具,远程的代码管理是基于ssh的,所以要使用远程的git则需要ssh的配置。 github的ssh配置如下: 一 、 设置git的user name和email: $ git config --global user.name "xuhaiyan"$ ...
1 2 3 4 5 ... 20
收藏数 539,507
精华内容 215,802
关键字:

ssh