SSH连接原理及ssh-key讲解

Posted mendermi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH连接原理及ssh-key讲解相关的知识,希望对你有一定的参考价值。

一、远程连接的两种方式

1、telnet 明文连接,不安全。 连接方式:telnet 加IP加端口号(可判断对方的某个端口是否开启) 
2、ssh 加密连接,安全 。连接方式:ssh加IP 对方22端口必须是开启状态 
可指定登录的用户,不指定默认登录root用户 
以上必须安装scp命令,支持远程连接才行,并且以上两种不能彼此连接。

 

二、远程复制

1、命令说明:

scp 远程复制  参数-P(大写):接端口,默认22  -r:递归,表示拷贝目录  -p:表示在拷贝前后保持文件或目录属性  -l limit:限制速度

2、实例: 
例1:把本地的/etc/hosts远程复制给对方

scp /etc/hosts [email protected]:/etc 

例2、从对方取文件:

scp [email protected]:/etc/hosts /etc

注:如果远程登录时候很慢,改个配置文件即可方法如下:

1、vim /etc/ssh/sshd_config 里面第81行GSSAPIAuthentication yes改成no(表示不需要验证)122行#UseDNS yes改成UseDNS no (反向解析)
2、重启sshd服务
3、把改好的配置文件复制给对方服务器
4、重启对方的sshd服务
 

三、密钥对

密钥对:是一个含有私钥的文件和一个含有公钥的文件,两只关系为用私钥登录公钥,实现免密码登录,私钥可以一对多个公钥。私钥会放在家目录下的隐藏.ssh目录里,私钥权限为600,公钥644

 

四、密钥对应用

1、命令:
创建密钥对:ssh-keygen  参数:-t:指定加密类型(rsa,dsa)。-f:指定密钥对文件的名字 。 -P(大写):指定密码
命令说明:
1)创建密钥对时,要你输入的密码,为进行密钥对验证时输入的密码(和linux角色登录的密码完全没有关系);
2)如果我们要进行的是SSH免密码连接,那么这里密码为空跳过即可。
3)如果在这里你输入了密码,那么进行SSH密钥对匹配连接的时候,就需要输入这个密码了。(此密码为独立密码)
4)用户家目录下的.ssh隐藏目录下会生成:id_rsa  id_rsa.pub  两个文件。id_rsa是用户的私钥;id_rsa.pub则是公钥
 

五、实例

例1:生成密钥对,传给对方服务器

1、创建密钥对 ssh-keygen
2、将公钥id_rsa.pub文件复制到另外一台服务器的用户家目录下的.ssh目录下 ,如果没有需要创建一个。并且权限改成700
3、将拷贝过去的id_rsa.pub文件里的内容追加到~/.ssh/authorized_keys文件里
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

例2:登录普通用户远程免密码

1、将公钥id_rsa.pub文件复制到另外一台服务器的普通用户家目录下
scp ~/.ssh/id_rsa.pub [email protected]:~
2、将公钥内容写入cat ~/.ssh/id_rsa.pub >> ~/authorized_keys
3、在去另外一台服务器家目录下创建.ssh目录并修改权限为700,把属主改为普通用户
4、authorized_keys移动到.ssh目录下,改属主为普通用户

例3:非交互式一条命令创建密钥对

命令说明:ssh-copy-id 分发公密钥对命令  参数:-i 指定要分发的内容 
1、一条命令生成密钥对
ssh-keygen -t dsa -f ~/.ssh/id_dsa -P ""
2、通过ssh-copy-id进行公钥的自动分发:
 ssh-copy-id -i ~/.ssh/id_dsa.pub  [email protected]
把公钥分发给普通用户yunjisuan 

例4:免密码登录对方服务器

1、需要安装sshpass工具,需要云yum仓库安装。参数 -p 指定密码  -f:给出密码文件路径
2、sshpass -p “密码”ssh-copy-id -i ~/.ssh/id_dsa.pub  [email protected]
表示给普通用户yunjisuan设定免密码连接

说明:

.ssh下的known_hosts文件是记录已经连接过的IP用的。
远程登录时无需提示直接记录方法 --免交互分发公钥
sshpass -p “密码” ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 对方IP"
命令说明:-o StrictHostKeyChecking=no:不记录对方主机信息

五、实战自动批量分发密钥对脚本

#!/bin/bash

function Yum(){

umount /dev/sr0 &>/dev/null
[ -d /media/cdrom ] || mkdir -p /media/cdrom
[ $? -eq 0 ] && echo "创建目录成功" || exit
    mount /dev/sr0 /media/cdrom &>/dev/null
    if [ $? -eq 0 ];then
        echo "挂载成功"
else
        exit
fi
[ -d /etc/yum.repos.d ] || mkdir -p /etc/yum.repos.d
cd /etc/yum.repos.d
mv * /tmp
cat > moban.repo << ok
[moban.repo]
name=moban
baseurl=file:///media/cdrom/
gpgcheck=0
enabled=1
ok
if [ $? -eq 0 ];then
            echo "配置文件成功"
    else
            exit
    fi
    yum -y clean all &>/dev/null
    yum makecache &>/dev/null
    if [ $? -eq 0 ];then
        echo "搭建成功"
else
        echo "搭建失败请从新检查"
        exit
fi

}

function Yun(){
ping -c 1 www.baidu.com &>/dev/null
if [ $? -eq 0 ];then
            echo "准备下载配置文件"
    else
            echo "不能连接外网,请检查网络"
            exit
    fi
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    yum -y clean all
    yum makecache
    if [ $? -eq 0 ];then
        echo "云yum搭建完毕"
else
        echo "搭建失败,请从新检查"
        exit
fi
}

which scp &>/dev/null
if [ $? -eq 0 ];then
        echo "远程插件已安装"
else
        Yum
        yum -y install openssh-client
        echo "远程插件安装完毕"
fi

which sshpass &>/dev/null
if [ $? -eq 0 ];then
        echo "sshpass工具已安装"
else
        Yun
        yum -y install sshpass
        echo "sshpass工具安装完毕"
fi


[ -d ~/.ssh ] && rm -rf ~/.ssh/* || mkdir .ssh
chmod 700 ~/.ssh
ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" &>/dev/null
i=1
for ip in 192.168.200.{100..149}
do
        ping -c 1 -i 0.1 $ip &>/dev/null
            if [ $? -eq 0 ];then
                sshpass -p "123456" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no [email protected]"$ip"" &>/dev/null
                    echo "$ip分发成功"
        else
                echo "$ip网络不通,请检查网络"
        fi
        let i++
done




以上是关于SSH连接原理及ssh-key讲解的主要内容,如果未能解决你的问题,请参考以下文章

SSH连接原理及ssh-key讲解

scp ssh-key连接原理

Linux系统——ssh-key连接原理

安全防范:服务器连接及权限处理

ssh-key的生成分发及配置

git ssh-key 及邮箱的配置