zoukankan      html  css  js  c++  java
  • SSH用法

    一、SSH简介

    SSH是最常用的远程安全登陆协议,具体的软件实现有:

    • OpenSSH: ssh协议的开源实现,CentOS默认安装
    • dropbear:一个轻量级的开源实现

    SSH协议版本:

    • v1:基于CRC-32做MAC,不安全;man-in-middle
    • v2:基于DH算法做密钥交换,基于RSA或DSA实现身份认证

    SSH常用的两种用户登认证

    • 基于password
    • 基于key

    二、OpenSSH软件

    1、OpenSSH介绍

    • 相关软件包由openssh、openssh-client、openssh-server组成
    • 基于C/S结构
    • Linux client: ssh, scp, sftp,slogin
    • Windows客户端:xshell, putty, securecrt, sshsecureshellclient
    • 服务端:sshd服务 systemctl status sshd.service

    2、ssh客户端

    • 配置文件:/etc/ssh/ssh_config
    • Host PATTERN StrictHostKeyChecking no 首次登录不显示检查提示

    • 格式:ssh [user@]host [COMMAND]
      ssh [-l user] host [COMMAND]
      -p port:远程服务器监听的端口
      -b:指定连接的源IP
      -v:调试模式
      -C:压缩方式
      -X: 支持x11转发
      -Y:支持信任x11转发
      ForwardX11Trusted yes
      -t: 强制伪tty分配
      ssh -t remoteserver1 ssh remoteserver2

    3、ssh服务用户和口令登录验证

    • 客户端发起ssh请求,服务器会把自己的公钥发送给用户
    • 用户会根据服务器发来的公钥对密码进行加密
    • 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

    4、ssh服务基于密钥登录验证

    • 首先在客户端生成一对密钥(ssh-keygen)
    • 并将客户端的公钥ssh-copy-id 拷贝到服务端
    • 当客户端再次发送一个连接请求,包括ip、用户名
    • 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:acdf
    • 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
    • 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
    • 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

     

    注意: 基于key验证,私钥的保存特别关键,可以用ssh-keygen -p加口令验证,此时ssh对方主机时输入的口令是私钥的口令,而不是对方服务器口令

     

    三、实验

    1、实验一:多台服务器之间都基于key登录验证:

    •   第一种方法:

    每台服务器上执行ssh-keygen

    ssh-copy-id 本机IP

    别的服务器执行同样的command

    scp authorized_keys 到所有服务器

    • 第二种方法:

    scp -pr .ssh到所有主机上,共享一个密钥。

    2、实验二:批量发布脚本到所有服务器上

    • 按照实验一建立一台管理客户端到多台服务器的基于key的登录验证
    • 编写script f1.sh

    #!:/bin/bash

    hostname

    编写ip.txt,把key通过验证的服务器IP加入

    • 执行如下的命令

    for ip in $(cat ip.txt); do scp f1.sh $ip:/root/ ;done(批量copy脚本f1.sh到多台服务器)

    for ip in $(cat ip.txt); do ssh $ip "/root/f1.sh" ;done(可以远程批量执行脚本)

    3、实验三:脚本实现多台服务器之间的key登录验证设置

    实用场景:100台机器实现key验证:

    • 编写脚本:

    #!/bin/bash
    rpm -q expect &> /dev/null || yum install expect -y
    ssh-keygen -P "" -f "/root/.ssh/id_rsa"
    password=verimatrix
    while read ipaddr;do
    expect <<EOF
    set timeout 10
    spawn ssh-copy-id $ipaddr
    expect {
    "yes/no" { send "yes ";exp_continue }
    "password" { send "$password " }
    }
    expect eof
    EOF
    done < ip.txt

    • 把100台服务器的IP写入ip.txt

    四、几个有用的命令

    1、pssh批量执行

    • 前提:需要安装pssh从EPEL yum reposity,第二,主机间需要实现基于key的登陆验证方式
    • 把需要管理的服务器的ip写入ip.txt文件
    • pssh -h ip.txt  -i hostname 显示所有服务器的hostname
    • pssh -h ip.txt  -i 'useradd psshuser' 在所有服务器上新建用户psshuser
    • pssh -h ip.txt  -i 'getenforce' 显示所有服务器的Slinux策略
    • pssh -h ip.txt -o /app/test/script/psshtest  -i 'cat /etc/fstab' 在本机目录下/app/test/script/psshtest 生成以服务器IP为文件名的输出结果
    • pssh -h ip.txt 'sed -i "s/^SELINUX=.*/SELINUX=enforcing/" /etc/selinux/config' 修改所有服务器的Selinux为enable

    2、PSCP.PSSH命令

    pscp.pssh -h ip.txt /root/f1.sh /data/ (把)额发生过f1.sh推送到远程主机上/data是远程主机的文件夹

    pssh -h ip.txt -i ”/data/f1.sh“在所有服务上执行f1.sh脚本

    3、PSLURP.PSSH命令

    pslurp -h ip.txt -L /app/test/script/psshtest /var/log/messages m 把ip.txt中指定的服务器的/var/log/messages复制到本机/app/test/script/psshtest目录下,执行之后会在此目录下生以ip.txt中指定的ip为名称的文件夹,同时以m的文件名字保存。

     

     

  • 相关阅读:
    Django的认证系统
    Django 中间件
    Django Form和ModelForm组件
    AJAX
    Django中ORM介绍和字段及字段参数
    Django ORM那些相关操作
    Python中应该使用%还是format来格式化字符串?
    Cookie、Session和自定义分页
    ORM版学员管理系统3
    ORM版学员管理系统2
  • 原文地址:https://www.cnblogs.com/liangjindong/p/9069390.html
Copyright © 2011-2022 走看看