ssh介绍和部署

https://www.kancloud.cn/noahs/linux/1629267

1 介绍
ssh实现在传输数据的时候,加密传输,用于远程登录会话和为其他网络服务提供安全性协议

1.1 SSH知识点总结:
ssh是安全的加密协议,用于远程连接linux服务器
ssh默认端口22,有两个版本ssh2和ssh1,版本1有漏洞不用
ssh服务主要提供两种:ssh服务和SFTP服务
linux ssh客户端包含ssh远程连接命令,远程拷贝命令scp
1.2 SSH加密流程
服务端产生768字节公钥(server key)
客户端向服务端发生请求
服务端返回该公钥给客户端
客户端产生256字节私钥(private key)并与公钥组成1024字节的密钥对(key pair)
客户端将密钥对发送给服务端,后续通信就使用此密钥对验证数据
密钥存放位置: ~/.ssh/known_hosts
1.3 SSH的认证类型
基于口令的安全验证
只需要口令就能连接,不安全
基于密钥的安全验证
大批量管理时使用的方法,安全.认证流程如下:
ssh管理服务器上创建密钥对信息(公钥 私钥)
vssh管理服务器上将公钥发送给被管理服务器
ssh管理服务器向被管理服务器发送连接请求
ssh被管理服务器向管理服务器发送公钥质询
ssh管理服务器处理公钥质询请求,将公钥质询结果发送给被管理主机
ssh被管理服务器接收公钥质询响应信息,从而确认认证成功
ssh管理服务端可以和被管理服务端建立基于密钥连接登录
2 秘钥方式部署和配置讲解
2.1 部署
管理主机上创建秘钥对
ssh-keygen -t dsa
mark
2) 分发公钥给被管理主机

ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31
会要求输入被管理主机密码
进行测试
ssh 172.16.1.31
如果不提示输入密码,则配置成功
ssh 172.16.1.31 uptime
可以只在被管理主机上执行命令而不登录主机
2.2 配置文件
重要文件说明
/etc/init.d/sshd        服务程序,用start启动
/etc/ssh/sshd_config    服务端配置文件
/etc/ssh/ssh_config        客户端配置文件
sshd_config配置文件说明
Port 22    [安全]默认端口,建议改为其他的[52113]
UseDNS     [速度]是否使用DNS解析域名,建议改为no
ListenAddress 0.0.0.0    [安全]监听地址,可配置仅监听内网卡IP
PermitRootLogin no        [安全]是否允许root用户登陆,建议禁止no
PermitEmptyPasswords no    [安全]是否允许空密码登陆,建议禁止no
GSSAPIAuthentication no    [速度]是否进行GSSAPI认证,设置为no 
sshd_config配置文件修改
用sed命令一次性修改
sed -i.ori '13i port 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nGSSAPIAuthentication no\nUseDNS no' /etc/ssh/sshd_config
未修改内网监听项,一般需先配置好vpn后再修改
查看结果

sed -n '13,17p' /etc/ssh/sshd_config
port 52113
PermitRootLogin no
PermitEmptyPasswords no
GSSAPIAuthentication no
UseDNS no
3 SSH使用和总结
3.1 命令相关
SSH命令远程登录方式:
ssh -p 52113 oldboy@172.16.1.61
指定端口和用户名链接到远程服务器,如果端口和用户名是默认的,可以不写
ssh -p 52113 oldboy@172.16.1.61 /sbin/ifconfig eth0
只远程登录到服务器执行相应命令,执行完毕仍然回到本机,即不登录
SSH分发公钥方法
直接使用分发命令
ssh-copy-id命令,默认端口和非默认端口,写法分别如下
ssh-copy-id -i .ssh/id_dsa.pub oldgirl@172.16.1.8
ssh-copy-id -i .ssh/id_dsa.pub "-p 52113 oldgirl@172.16.1.31"
上传到服务器以后,存放在对方用户的家目录下的.ssh隐藏文件夹中,并且会自动更名和修改权限
ls -l .ssh/
-rw------- 1 oldgirl oldgirl 601 11月  4 09:16 authorized_keys
目录权限700,公钥文件权限600,且自动改名
如果不能用远程拷贝命令的方法
用其他方式传输公钥到目标服务器,然后追加到公认证文件中[authorized_keys]

cat id_rsa.pub >>/root/.ssh/authorized_keys
3.2 防止SSH登录入侵小结:
用密钥登录,不用密码登录
牤牛阵法:解决SSH安全问题
防火墙封闭SSH,指定源IP限制(局域网、信任公网)
开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)
尽量不要给服务器外网IP
3.3 SSH重点知识小结
ssh为机密的远程连接协议,相关软件有openssh,opensshl
默认端口22
协议版本1.x和2.x,2.x更安全,要明白ssh协议原理
服务端ssh远程连接服务,sftp无法,sshd有首付进程,开机要自启动
ssh客户端包含ssh,scp,sftp命令
ssh安全验证方式:口令和密钥,要明白密钥登录原理
ssh服务安全优化,修改默认端口,禁止root远程,禁止空密码,禁止dns,只监听内网
ssh密钥对,公钥在服务端(public key),私钥在客户端(private key)

SSH批量分发脚本

1 IP内置版

#!/bin/bash
#脚本功能:ssh秘钥免交互批量分发 脚本名:fenfa_ssh.sh
#脚本属主:罗钢 联系方式:278554547@qqcom
#要点提示:ssh-keygen -f和-n参数免交互生成秘钥;sshpass命令免交互输入密码;ssh -o参数取消提示语句
. /etc/init.d/functions
Ip_up=172.16.1.
Ip_arr="7 31 41"
Pass_c=123456
Pass_e=abcdef
Pub_file=/root/.ssh/id_dsa.pub
#1.检查公钥文件是否存放,不存在则免交互生成
if [ ! -f /root/.ssh/id_dsa ];then
  ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""  >/dev/null 2>&1
fi
#2.检查sshpass命令是否存在,不存在则yum安装
if [ ! -f /usr/bin/sshpass ];then
  yum install -y sshpass  >/dev/null 2>&1
fi
#3.for循环分发秘钥,如果已经可以免秘钥的,则跳过,免秘钥后,检查并输出检查结果
for Ip_down in $Ip_arr
do
#3.1 使用错误的密码登录远程主机并执行命令,如果仍然能执行成功则说明已做过免秘钥
  sshpass -p$Pass_e ssh "-o StrictHostKeyChecking=no" $Ip_up$Ip_down hostname >/dev/null 2>&1
  if [ $? -eq 0 ];then
    action "$Ip_up$Ip_down :已经可以免秘钥登录,不需要操作" /bin/true
  else
#3.2 使用sshpass命令非交互方式输入密码,使用-o参数功能取消提示语句以便免交互分发秘钥
    sshpass -p$Pass_c ssh-copy-id -i $Pub_file "-o StrictHostKeyChecking=no $Ip_up$Ip_down" >/dev/null 2>&1
    if [ $? -eq 0 ];then
       action "免交互分发ssh秘钥到 $Ip_up$Ip_down" /bin/true
    else
       action "免交互分发ssh秘钥到 $Ip_up$Ip_down" /bin/false
    fi
  fi
done

2 传参版

#!/bin/bash
#脚本功能:ssh秘钥免交互批量分发
#制 作 人:罗钢 联系方式:278554547@qqcom
#要点提示:ssh-keygen -f和-n参数免交互生成秘钥;sshpass命令免交互输入密码;ssh -o参数取消提示语句
. /etc/init.d/functions
Ip_up=172.16.1.
Ip_arr="7 31 41"
Pass_c=123456
Pass_e=abcdef
Pub_file=/root/.ssh/id_dsa.pub
#1.检查公钥文件是否存放,不存在则免交互生成
if [ ! -f /root/.ssh/id_dsa ];then
  ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""  >/dev/null 2>&1
fi
#2.检查sshpass命令是否存在,不存在则yum安装
if [ ! -f /usr/bin/sshpass ];then
  yum install -y sshpass  >/dev/null 2>&1
fi
#3.for循环分发秘钥,如果已经可以免秘钥的,则跳过,免秘钥后,检查并输出检查结果
for Ip_down in $Ip_arr
do
#3.1 使用错误的密码登录远程主机并执行命令,如果仍然能执行成功则说明已做过免秘钥
  sshpass -p$Pass_e ssh "-o StrictHostKeyChecking=no" $Ip_up$Ip_down hostname >/dev/null 2>&1
  if [ $? -eq 0 ];then
    action "$Ip_up$Ip_down :已经可以免秘钥登录,不需要操作" /bin/true
  else
#3.2 使用sshpass命令非交互方式输入密码,使用-o参数功能取消提示语句以便免交互分发秘钥
    sshpass -p$Pass_c ssh-copy-id -i $Pub_file "-o StrictHostKeyChecking=no $Ip_up$Ip_down" >/dev/null 2>&1
    if [ $? -eq 0 ];then
       action "免交互分发ssh秘钥到 $Ip_up$Ip_down" /bin/true
    else
       action "免交互分发ssh秘钥到 $Ip_up$Ip_down" /bin/false
    fi
  fi
done