zoukankan      html  css  js  c++  java
  • ssh服务简介及应用与服务的进程的类型

    SSH ,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。

    默认端口号:22  

    客户端:openssh-client     服务端:openssh(linux系统默认客户端,服务端都安装了

    dropbear:非开源版的ssh

    ssh的客户端可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接

    ssh的功能

    1.远程登录
    2.文件传输
    3.功能共享
    (都是加密实现)

    两个认证
         客户端验证服务器端
         服务器端对客户端的做验证


    ssh独立守护进程服务(以centos6为例)
    # service sshd start|stop|restart|status
    # chkconfig sshd on

    客户端在收到服务器段的公钥之后,会生成一个密钥对,然后基于这个密钥实现安全传输
    1. 当服务器端启动了ssh,那么就会自动生成一个密钥对
    2. 当服务器端收到用户连接请求,那么就将公钥文件发送给客户端
    3. 客户端将收到的公钥文件保存 ~/.ssh/known_hosts
    下次登录时候,如果有目标主机的公钥文件,那么就是对于目标服务器的认证完成
    下次登录时候,如果有目标主机的公钥不存在文件或者信息有误,那么就是对目标服务器的认证失败
    4. 客户端保存了服务器端公钥文件后,会立刻产生一个私钥文件,构成一个密钥对,然后用公钥文件加密密钥对,然后将加密的数据传递到服务器端。服务器端解密以后,也就有了这样的一个密钥对。
    5. 双方基于这个密钥对来通信

    ssh基于c/s架构
    客户端:
    linux下客户端:ssh,配置文件:/etc/ssh/ssh_config

    服务器端;
    名称:sshd,配置文件:/etc/ssh/sshd_config

     linux下ssh客户端的使用方法

    格式

    ssh [-p port] [user@]host [command]

    服务器段的配置文件(常用配置)
    Port 22 指定sshd服务所监听的端口
    ListenAddress 0.0.0.0 指定sshd服务所监听的IP
    UseDNS yes|no 指定是否将主机名称做解析
    PermitRootLogin yes|no 指定是否运行root登录系统

    基于密钥方式登录系统

    1. 在用户的家目录中提前准备密钥文件(公钥)
    2. 登录的时候,客户端会将公钥文件发送给服务器端,然后服务器会做比对两个公钥,如果比对成功,会向客户端发送一个质询(该质询是用传输密钥对中的公钥加密)
    3. 客户度收到这个质询之后,会进行解密,然后将解密的结果发送给服务器端

    案例:实现密钥方式登录系统
    规划
    server:10.220.5.63
    client:10.220.5.67

    1.在客户端器端创建一个密钥对

    -t rsa 指定加密算法

    [root@67 ~]# ssh-keygen -t rsa        
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): <<<密钥对的保存位置
    /root/.ssh/id_rsa already exists.
    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:
    SHA256:iOndEAzGN3gx6OW8NtxoqRQ5oXEqtfb7besGUqKfpDc root@67managerslave
    The key's randomart image is:
    +---[RSA 2048]----+
    |   .ooo.         |
    |  o.*o=.         |
    | . B Oo.         |
    |. = *o+o         |
    | o oo*o=S        |
    |  ..=.Xo.        |
    |   =.B.o.        |
    |  . E  .o        |
    |   . o.++.       |
    +----[SHA256]-----+

    2.查看秘钥对

    id_rsa       私钥文件

    id_rsa.pub   公钥文件

    [root@67 ~]# ls /root/.ssh
    id_rsa  id_rsa.pub

    3.传送公钥到服务器端主机

    [root@67 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.220.5.63
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    root@10.220.5.63'
    Number of key(s) added: 1
    Now try logging into the machine, with:   "ssh 'root@10.220.5.63'"
    and check to make sure that only the key(s) you wanted were added.

    说明:
    -i:指定要传输的密钥文件
    root@10.220.5.63:指定传输到哪个主机上面
    传递到目标主机之后,公钥文件会被重命名为authorized_keys,该文件的权限必须600

    3.在客户端可以直接登录服务器端

    [root@67 ~]# ssh 10.220.5.63
    Last failed login: Sun Nov  4 02:00:26 CST 2018 from 10.220.5.67 on ssh:notty
    There was 1 failed login attempt since the last successful login.
    Last login: Sun Nov  4 00:16:27 2018 from 10.220.5.70
    [root@63 ~]# <<<已登录

    linux ssh客户端工具

    ssh  作用:远程登录或者远程执行命令
       格式:ssh -p 端口 用户@主机 [命令]
    scp   作用:传输文件
    格式:
    推送:scp /path/file user@host:/path
    拉取:scp user@host:/path/file /path
    选项
    -P 端口:指定端口号
    -r:递归传输一个目录及其内部的文件
    -p:保留文件的属性不变
    -v:显示传输过程信息
    -l:限制传输速率

    总结:实现给多个主机分发文件
    1. 发送端需要有私钥文件
    2. 所有的接收端需要有公钥文件
    3. 所有节点都需要有相同的用户
    4. 公钥文件和私钥文件必须有正确的权限

    ssh登录缓慢
    启用对主机名做反解
    方式1:修改配置文件,禁止做反解 UseDns no
    方式2:修改 /etc/hosts 添加一个主机名称的解析记录
    方式3:ssh -v 查看登录过程信息,判断故障点

    将一个文件传递到非用户家目录下,默认是没有权限,解决方式
    1. 用root身份执行操作
    2. 用suid
    3. 分两步走,
    第一步:先传递到目标主机的用户的家目录中
    第二步:远程执行命令,将目标主机家目录中哪个文件移动到目标位置(依赖sudo)


    案例:web1用scp将文件a.txt传递到web2的/root下(以tom身份来传输文件)
    第一步:在web2上为tom做sudo授权
    # visudo
    tom ALL=() /bin/mv

    第二步:在web1上执行scp,将a.txt传递到web2主机的/home/tom下
    # scp a.txt tom@web2:/home/tom

    第三步:在web1上执行ssh,将a.txt从tom家目录中移动到root下
    # ssh -t tom@web2 sudo mv /home/tom/a.txt /root/

    ssh相关的操作日志
    /var/log/secure


    生产环境中,实现文件批量分发方案有
    1:基于ssh key+shell
    优点:简单
    缺点:节点数量几百台为宜
    2:puppet
    优点:功能强大、支持节点数量很多
    缺点:操作复杂
    3:saltstack
    以上两者的折中方案
    4:ftp/http+crotab
    非主流方案

  • 相关阅读:
    简单实现vue列表点击某个高亮显示
    vue中子组件直接修改父组件prop属性bug
    Java基础——关于接口和抽象类的几道练习题
    Eclipse中导入外部jar包步骤
    Java基础——关于jar包的知识
    Java基础——关于访问权限的一道例题
    Java基础——抽象类和接口
    Java基础——多态
    Java基础——继承
    三个案例,解读静态代码块和构造代码块
  • 原文地址:https://www.cnblogs.com/bo-ke/p/9901574.html
Copyright © 2011-2022 走看看