简介

1.Ssh 是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能。

2.OpenSSH 是实现SSH软件的开源软件项目

结构

C/S结构:客户机和服务器结构,是软件体系结构。

B/S结构:浏览器和服务器结构,是WEB兴起后的一种网络结构模式,

环境

检查是否有sshscp命令,如果没有,安装openssh-clients安装包

普通连接

使用ssh,加上要登陆的账号@要登陆的主机IP地址,然后输入密码进行登录。

输入exit退出远程登录

如果是第一次连接,会提示用户,输入yesno,作用是建立连接。会在连接双方的用户的家目录中的.ssh目录中,创建一个known_hosts文件,里面记录的对方的信息。

如果不写登录账号,默认使用root账号登录。

密钥对连接

验证过程

  1. SSH客户端以root用户身份创建密钥对
  2. 客户端将创建的公钥文件上传到SSH服务端临时位置
  3. 服务端将公钥信息导入用户root的公钥数据库文件
  4. 客户端以root用户身份连接服务器端root用户测试

创建

密钥

[root@server ~]# ssh-keygen

//创建密钥对,一直按回车即可

id rsa :私钥配置文件

id rsa.pub:公钥配置文件

方法一

分发

密钥

[root@server ~]# cd .ssh/

//进入.ssh配置文件,查看密钥对

[root@server .ssh]# scp ~/.ssh/id_rsa.pub 192.168.200.5:/root/

//通过scp命令,将公钥拷贝到服务器的root目录下,输入对方的root密码

公钥

操作

1

查看另一台机器的root目录是否有.ssh目录,如果没有,那么创建.ssh目录,并将该目录的权限设置为700

[root@client ~]# mv id_rsa.pub .ssh/

//将公钥移动到.ssh目录中

[root@client .ssh]# mv id_rsa.pub authorized_keys

//更改公钥名称

[root@client .ssh]# vim /etc/ssh/sshd_config

//如果记不住这个文件的名称,可以在公钥进程中查看

测试

当再次使用ssh进行远程连接时,不需要再输入密码,直接就可以登录。

Ps

如果连接的是普通用户,那么就要在普通用户的家目录中导入公钥,并且其家目录中要有.ssh文件且权限为700。然后将公钥导入该目录即可。

方法二

[root@client ~]# ssh-copy-id  -i  ~/.ssh/id_rsa.pub 192.168.200.4

-i:指定公钥位置

//将公钥发给192.168.200.4主机,没写用户,默认为超户

测试

Ps

如果要是发给客户机上其他用户,则必须指定该用户

脚本编写步骤分析

1

一步创建密钥对

[root@client .ssh]# ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsa

2

跳过第一次连接用户输入yes/no

[root@client ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 192.168.200.4"

//不提示用户输入yes/no

进入/etc/ssh/ssh_config配置文件,修改StrictHostKeyChecking  ask

ask的值改为no,然后使用service sshd rstart重启服务,此时,就算是普通连接,第一次也不会出现yes/no。(需要修改服务器配置)

3.

跳过密码(免密推送公钥)

安装sshpass

[root@client yum.repos.d]# yum -y install sshpass

yumwget http://files.tttidc.com/centos6/epel-6.repo

[root@client ~]# sshpass -p "abc123," ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 192.168.200.4"

sshpass -p :指定远程登录的密码

4.

检测主机IP是否可以Ping通,如果可以Ping通,那么存活,那么就分发密钥对,如果不存活,则不发送

脚本

举例

#!/bin/bash

function localYumBuild(){

echo "正在安装本地yum仓库"

umount /dev/sr0 &>/dev/null

 [ -d /media/cdrom ] || mkdir -p /media/cdrom

mount /dev/sr0 /media/cdrom &>/dev/null

 [ $? -eq 0 ] || echo "请插入光盘"

    [ -d /etc/yum.repos.d ] || mkdir -p /etc/yum.repos.d &>/dev/null

    cd /etc/yum.repos.d

    mv * /tmp/

    cat > /etc/yum.repos.d/localyum.repo << EEE

    [local] 

    name=localrepo

    baseurl=file:///media/cdrom/

    gpgcheck=0

    enabled=1

    EEE 

    yum -y clean all &> /dev/null

    yum makecache &> /dev/null

[ $? -eq 0 ] && echo "本地yum 仓库搭建成功" || (echo "本地yum仓库搭建失败" && exit)

  }

which wget &>/dev/null || yum -y install wget &>/dev/null

localYumBuild

yum -y install wget &>/dev/null || (echo "系统错误" &&exit)

function yunYumBuild(){

echo "正在安装云yum仓库"

cd /etc/yum.repos.d

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

[ $? -eq 0 ] && echo "云yum 仓库搭建成功" || (echo "云yum仓库搭建失败" && exit)

    }

    echo "网络连接检查中..."

ping www.baidu.com -c2 &>/dev/null || (echo"无网络连接,无法运行脚本" && exit)

 which sshpass &>/dev/null || yum -y install sshpass &>/dev/null

     if [ $? -ne 0 ];then

 yunYumBuild

  yum -y install sshpass &>/dev/null || ( echo "安装失败" && exit)

 fi

  [ -d ~/.ssh ] || mkdir -p ~/.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 192.168.200.{1..254}

 do

 ping $ip -c 2 -i 0.1 &>/dev/null

      if [ $? -eq 0 ];then

         echo "$ip 存活"

      sshpass -p "666666" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@$ip" &>/dev/null && echo "密钥分发成功"

     else

            echo "$ip 不存活"

fi

done

2021-1-7

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐