zoukankan      html  css  js  c++  java
  • ssh免秘钥登录

    简介

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

     

    SSH无密码(密钥验证)登录的配置

    (方法一)配置主机A免密登录到主机B
    1.在主机A生产密钥对: ssh-keygen -t rsa 会在当前登录用户的home目录下的.ssh目录下生成id_rsa和id_rsa.pub两个文件,分别代表密钥对的私钥和公钥。
    2.拷贝主机A的公钥到主机B: scp /root/.ssh/id_rsa.pub root@192.168.0.1:/root
    3.将主机A的公钥加到主机B的授权列表.ssh/authorized_keys(若不存在,手动创建): cat id_rsa.pub >> authorized_keys 
    4.授权列表authorized_keys的权限必须是600,chmod 600 authorized_keys
    测试
    ssh root@192.168.0.1
    scp abc.txt root@192.168.0.1:/root


    (方法二)#进入到我的home目录 cd ~/.ssh
    ssh-keygen -t rsa (四个回车) 
    执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥) 
    将公钥拷贝到要免登陆的机器上: ssh-copy-id localhost

    最基本的用法

    SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。

    1
    $ ssh user@host

    如果本地用户名与远程用户名一致,登录时可以省略用户名

    1
    $ ssh host

    SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。

    1
    $ ssh -p 2222 user@host

    上面这条命令表示,ssh直接连接远程主机的2222端口。

    下面开始部署ssh秘钥的批量分发

    第一步:安装sshpass免交互工具并进行SSH-key的批量分发

    下载epel源并更新yum仓库

    1
    2
    [root@controller ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    [root@controller ~]# yum clean all -y && yum makecache

    第二步:创建密钥对文件

    免交互创建密钥对

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    [root@controller ~]# ssh-keygen -t dsa -f ~/.ssh/id_dsa -P ""
    Generating public/private dsa key pair.
    /root/.ssh/id_dsa already exists.
    Overwrite (y/n)? y
    Your identification has been saved in /root/.ssh/id_dsa.
    Your public key has been saved in /root/.ssh/id_dsa.pub.
    The key fingerprint is:
    SHA256:Qn8BNpM9ZpcRUgV7ewxn0GTOoZvfn5CcqQz7Dt7xqlA root@controller
    The key's randomart image is:
    +---[DSA 1024]----+
    |        =o..=*o+o|
    |       ..+=.o..=o|
    |      .  o.o..o =|
    |     . .   . .o* |
    |      . SE.  o. o|
    |       ...  . =..|
    |       . o . * ..|
    |        o * + . o|
    |         ++B.. ..|
    +----[SHA256]-----+
    [root@controller ~]# ls ~/.ssh/
    id_dsa  id_dsa.pub
    命令说明:
    ssh-keygen:生成密钥对命令
    -t:指定密钥对的密码加密类型(rsa,dsa两种)
    -f:指定密钥对文件的生成路径包含文件名
    -P(大写):指定密钥对的密码

    第三步:免交户方式分发公钥

    1
    [root@controller .ssh]# sshpass -p "123" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@192.168.128.165"

    命令说明:

    sshpass:专为ssh连接服务的免交户工具

    -p :指定登录的密码

    ssh-copy-id:自动分发公钥的工具

    -i:指定公钥路径

    -o StrictHostKeyChecking=no :不进行对方主机信息的写入(第一次ssh连接会在know_hosts文件里记录)

    交互式分发命令

    1
    ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.91.135

    第四步:测试

    1
    2
    [root@controller .ssh]# ssh root@192.168.128.165
    Last login: Wed Jan 10 02:32:04 2018 from controller

    编写脚本:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #!/bin/bash
    User=root
    passWord=123
    port=2266
    function YumBuild(){
    echo "正在安装epel源yum仓库,请稍后..."
    cd /etc/yum.repos.d/ &&
    [ -d bak ] || mkdir bak
    [ `find ./*.* -type f | wc -l` -gt 0 ] && find ./*.* -type f | xargs -i mv {} bak/
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo &>/dev/null
    yum -y clean all &>/dev/null
    yum makecache &>/dev/null
    }
    rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null
    if [ $? -gt 0 ];then
    YumBuild
    yum -y install sshpass &>/dev/null || (echo "sshpass build error!" && exit)
    fi
    [ -d ~/.ssh ] || mkdir ~/.ssh;chmod 700 ~/.ssh
    echo "正在创建密钥对...."
    rm -rf ~/.ssh/id_dsa ~/.ssh/id_dsa.pub
    ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" &>/dev/null
    for ip in `cat /root/Pingip.txt`
    do
    ping $ip -c1 &>/dev/null
    if [ $? -gt 0 ];then
    echo "$ip无法ping通请检查网络"
    continue
    fi
    sshpass -p "$passWord" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no -p2266 ${User}@$ip" &>/dev/null
    echo "$ip 密钥分发成功"
    done

     

  • 相关阅读:
    [ZJOI2007]时态同步 题解
    Xposed 在android 6.0上报couldn't load class,找不到xposed_init中配置的入口类
    微信小程序http 400问题
    在Mac上 python中使用tesseract OCR (Pytesser) 识别图片中的文字
    微信小游戏跳一跳简单手动外挂(基于adb 和 python)
    第一个微信小程序踩的几个小坑
    android studio/Intellij IDEA(MAC OSX)中android模拟器无法启动的一种原因
    【转载】word2vec原理推导与代码分析
    HTTP Get Post究竟有哪些区别
    初试kotlin:用Kotlin开发桌面/CommandLine 工具
  • 原文地址:https://www.cnblogs.com/zhuochong/p/10082616.html
Copyright © 2011-2022 走看看