zoukankan      html  css  js  c++  java
  • 02--OpenSSH1

    服务器的远程管理介绍

      远程管理使用两个协议,一个是早期的telnet协议,一个是现在常用的ssh协议;

      首先,远程管理服务提供的普通的C/S架构的;所以,我们需要在服务端运行一个软件程序,提供给客户端做连接;

      telnet协议使用 tcp/23 号端口,它追求的是软件程序小,而且传送熟读快,所以它使用简单,都是明文传输,相对于现在的互联网环境而言,不太安全;

      所以,我们似乎用ssh协议来取代了telnet协议;

    telnet协议

      telnet协议,明文传输数据,包括用户名和密码;使用tcp/23号端口;

      telnet协议在Linux下的使用方式:

    yum install telnet-server
    yum list all telnet*

      开机启动telnet,注意,telnet的服务名称是超级守护进程--xinetd,telnet进程是属于超级守护进程中的一个;

    chkconfig telnet on
    /etc/init.d/xinetd start
    chkconfig --list

    ss -tnl

      远程连接服务器 23 号端口:

        开启客户端的telnet功能:

        iptables防火墙放行23号端口:

    iptables -I INPUT -d 192.168.94.128 -p tcp --dport 23 -j ACCEPT

        远程连接,如下:

        再输入用户名和密码即可;

        【这里需要注意的是,telnet登陆不能使用root用户直接登陆,需要去创建普通用户】

    ssh协议

      相对于telnet,它是一种更加安全的远程连接协议;再传输数据之前,客户端与服务器端需要先建立加密通道,才能进行数据传输;

    ssh的工作原理

      sshv1不太安全,所以现在默认使用sshv2版本;

      1、客户端发起ssh请求

      2、服务器端发送私钥和加密的数据到客户端,然后客户端使用服务器的公钥进行解密,进行服务器的确认,保证服务器的身份的可靠性;如果没有这个过程,或者没有服务器的公钥,就会提示警告;

      3、客户端输入用户名和密码,传输到对端进行认证;这时候发送的用户名和密码是使用公钥进行加密了的数据;

      4、最后,服务器收到用户名和密码,配对认证通过,则服务器端发送命令提示符给客户端;

      

      除了可以使用用户名和密码登陆外,还能够使用证书来进行登陆;这种登陆方式,不需要使用用户名密码认证;这时,密钥对由客户端生成,再将公钥交给服务器,但是这个公钥是不能公开的;当客户端连接服务器端的时候,使用私钥加密数据,这时候,只要能匹配,则就能直接登陆到服务器上;

    ssh的版本

      v1:基于CRC-32做MAC校验的方式,不太安全,容易收到中间人攻击,所以v1版本的ssh我们现在使用较少了;

      v2:双方主机协议选择安全的MAC校验方式;基于DH算法来做密钥交换,基于RSA或者DES算法来实现省份验证的;其中,DH非对称算法可以再不传输密钥的情况下,让对端算出私钥;

    ssh的认证方式

      ssh协议一般使用两种认证方式:一种是基于user/password的方式;另一种就是基于证书认证的方式;

      下面我们再Linux上面实现这两种认证方式;我们使用的软件程序就是OpenSSH程序;

    OpenSSH

      OpenSSH工具是基于C/S架构的,客户端工具有:ssh,scp,sftp;服务器端:sshd服务;

    客户端

      客户端主配置文件为 /etc/ssh/ssh_config

      ssh命令

        用法:ssh [user@]host [command]

        -l  //指明登陆用户,和 user@ 效果一样

        -p  //指明登陆端口,默认额一般使用的 22 号端口;

        如果是想再其他主机上运行条命令:

    ssh root@192.168.94.128 'hostname'
    password:  //输入密码,则可以再服务器端运行hostname命令

    服务器端

      服务器端主配置文件为 /etc/ssh/sshd_config

    vim /etc/ssh/sshd_config  //查看服务器端主配置文件参数

      常用参数:

        port 20  //默认为20号端口,可以修改

        AddressFamily any  //支持ipv4或者ipv6

        Listenaddress 0.0.0.0  //监听的所有端口地址

        Hostkey  //主机的密钥

        KeyRegenerationInterval 1h  //对称密钥生成的新时间

        SyslogFacility AUTH  //记录日志的方式

          /var/log/secure  //这个目录下记录了登陆成功和失败的日志信息

        LoginCraceTime 2m  //登陆的限制时间长度 2分钟

        PermitRootLogin yes  //是否容许管理员登陆

        StrictModes yes  //是否使用严格的检查模式

        MaxAuth Tries 6  //最大的尝试次数

        MaxSessions 10  //最大的会话数量

        RSAAuthentication yes  //RSA认证

        PubkeyAuthentication yes  //支持公钥认证方式

        PasswordAuthentication yes  //支持密码认证方式

        ChallengeResponscAuthentication yes  //支持挑战认证方式

        Keyberos options  //守护认证,第三方的统一认证架构服务

        GSSAPI options  //GSS的开发接口选项

        X11 forwarding  //支持图形的传输功能

        UseDNS no  //关闭DNS的反向解析

    基于密钥的认证方式

      需要再客户端上生成一对密钥,将这对密钥中的公钥放入到服务器端的 ssh 目录中;

      1、客户端,生成密钥:

    ssh-keygen -t rsa

        默认回车即可;

      查看生成的密钥对;

    ls /root/.ssh/

        其中,id_rsa是私有密钥,而id_rsa.pud为公有密钥;

      也可以通过如下命令直接生成密钥对:

    ssh-keygen -t rsa -P '' -f '~/.ssh/id_rsa'  //这样就不用进入交互模式下

      2、将公钥传递给服务器端;

    ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.94.128
    passwd:

        传输到服务器端以后,名字默认跟换为了authorized_keys;

      3、测试

      这时候再去访问服务器,传输命令等操作,都不需要密码了;

    ssh root@192.168.94.128 'ifconfig'

      命令可以正常再客户端上面运行;

    scp与sftp

      scp为常用命令,它用来跨主机进行数据的传输;

      用法有两种:

      1、pull模式:scp [option] [user@]host:/PATH/FROM/SOMEFILE /PATH/TO/SOMEWHERE

        前提是客户需要有访问这个目录的权限

      2、push模式:scp [option] /PATH/FROM/SOMEFILE [user@]host:/PATH/TO/SOMEWHERE

      常用的option:

        -r  递归复制

        -p  保持源文件的属性信息

        -q  静默模式

        -P port  指定端口,和ssh工具使用的端口保持一致

      例如:

    scp root@192.168.94.128:/etc/fstab /tmp/fstab.bak
    scp /etc/fstab root@192.168.94.128:/tmp/

      sftp命令就和普通的ftp服务器一样:

      用法:sftp [user@]host

      help 命令可以查看再 sftp 下的用法;【和ftp的用法相同,这里就不再赘述】

  • 相关阅读:
    c++虚函数表 Brew VTBL
    c++ 类数据成员的定义、声明
    变量声明和定义的区别
    C++ 对象间的赋值与拷贝构造函数
    Android应用程序构成
    android平台的技术架构
    认识Service
    Application的作用
    Context的作用
    如何切换到自定义的Activity
  • 原文地址:https://www.cnblogs.com/BurnovBlog/p/10988627.html
Copyright © 2011-2022 走看看