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
    非主流方案

  • 相关阅读:
    JavaScript cookie详解
    Javascript数组的排序:sort()方法和reverse()方法
    javascript中write( ) 和 writeln( )的区别
    div做表格
    JS 盒模型 scrollLeft, scrollWidth, clientWidth, offsetWidth 详解
    Job for phpfpm.service failed because the control process exited with error code. See "systemctl status phpfpm.service" and "journalctl xe" for details.
    orm查询存在价格为空问题
    利用救援模式破解系统密码
    SSH服务拒绝了密码
    C# 调用 C++ DLL 中的委托,引发“对XXX::Invoke类型的已垃圾回收委托进行了回调”错误的解决办法
  • 原文地址:https://www.cnblogs.com/bo-ke/p/9901574.html
Copyright © 2011-2022 走看看