Linux shell 脚本实现一键免密登陆

Linux shell 脚本实现一键免密登陆

  • 本节索引
  • 场景分析
  • SSH 服务
  • Shell 脚本实现
  • Shell 脚本下载

本节索引

  1. 场景分析
  2. SSH 免密登录
  3. Shell 自动化脚本
  4. 脚本下载地址

场景分析

在我们日常工作中,经常面对几十台上百台服务器这样的环境,使用诸如ansible或者puppet这样的自动化运维工具则显得太过笨重和繁琐,并且最终的效果可能还不如几个小工具达到的效果好。所以ssh免密登录,配合自动化配置脚本,可以说是即方便也实用,关键是简洁明了、一气呵成。这一节将详细带大家以shell脚本的形式实现ssh免密登录进行百台机器的配置和管理。

SSH 服务

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

ssh服务有两种验证用户登录的方式,一种是基于密码口令的认证,一种是基于密钥的认证,脚本主要是实现基于密钥的认证。

Shell 脚本实现

为避免复制公钥的时候手动输入密码,我们使用shell脚本编程中的expect来代替输入登录密码

export_key()
{
    echo "Export authorized key to $vuser@$vip  port $port";

    expect -f expect/ssh_command.exp $vip $vuser $vpasswd $port "
        if [ -f $HOME/.ssh ]; then
            rm $HOME/.ssh;
        fi;
        mkdir -p $HOME/.ssh;
        chmod 755 $HOME/.ssh;
        touch $HOME/.ssh/authorized_keys;
        "
    expect -f expect/ssh_command.exp $vip $vuser $vpasswd $port "
        echo $authorized_key >> ~/.ssh/authorized_keys;
        cat ~/.ssh/authorized_keys | sort | uniq > /tmp/$vuuser-secure-keys;
        mv /tmp/$vuuser-secure-keys ~/.ssh/authorized_keys;
    chmod 600 ~/.ssh/authorized_keys;"
}

然后,生成秘钥

setup_key()
{
    if [ ! -r "$HOME/.ssh/id_rsa.pub" ]; then
        echo "Generate RSA key pairs, please press ENTER for all questions."
        ssh-keygen -q -f $HOME/.ssh/id_rsa -N '' -t rsa
    fi

    authorized_key=`cat $HOME/.ssh/id_rsa.pub`
}

最后,复制公钥至远程主机

ssh-copy-id [-i indetify_file ][user@host_ip] 

Shell 脚本下载

点我下载脚本
提取码:7da7

你可能感兴趣的:(Shell)