SSH认证原理和批量分发管理
SSH密码认证原理

几点说明:
1.服务端/etc/ssh目录下有三对公钥私钥:
[root@m01 ssh]# ls
moduli ssh_config sshd_config ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_key ssh_host_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub
其中,ssh_host_key和ssh_host_key.pub 用于ssh协议1版本;其它两对密钥用于ssh协议2版本,默认采用rsa密钥。
2.基于安全考虑,SSH一般禁用密码登录,同时修改SSH监听端口。
[root@m01 ssh]# cat -n sshd_config | egrep "Port|Password"
13 Port 52113
64 #PasswordAuthentication yes
65 #PermitEmptyPasswords no
66 PasswordAuthentication no
90 # PasswordAuthentication. Depending on your PAM configuration,
94 # PAM authentication, then enable this but set PasswordAuthentication
107 #GatewayPorts no
3.修改配置文件后,要使用reload重新加载,不要restart重启服务。
[root@m01 ssh]# /etc/init.d/sshd reload
Reloading sshd: [ OK ]
SSH密钥认证原理

几点说明:
1.客户端传输公钥需要进行ssh密码认证,所以应在密钥传输成功后再禁止密码登录和修改端口。
2.密钥创建的命令
[oldgirl@web01 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oldgirl/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): // 私钥密码不要加,见下文
Enter same passphrase again:
Your identification has been saved in /home/oldgirl/.ssh/id_rsa.
Your public key has been saved in /home/oldgirl/.ssh/id_rsa.pub.
The key fingerprint is:
93:ba:3e:8c:1c:70:28:d9:c1:5c:cc:28:f0:23:3e:33 oldgirl@web01
[oldgirl@web01 ~]$ ssh-copy-id -i .ssh/id_rsa.pub oldgirl@172.16.1.61
oldgirl@172.16.1.61's password:
Now try logging into the machine, with "ssh 'oldgirl@172.16.1.61'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
[oldgirl@web01 ~]$ ls .ssh/
authorized_keys id_rsa id_rsa.pub known_hosts
3.创建密钥时,不要创建私钥密码,因为批量执行命令不能有交互。如果创建了私钥密码,则执行远程登录或远程执行时,就需要输入私钥密码。使用密钥认证一是为了防止密码泄露,二是为了方便,三是为了批量管理。
[oldgirl@web01 ~]$ ssh oldgirl@172.16.1.61
Enter passphrase for key '/home/oldgirl/.ssh/id_rsa':
Last login: Tue Aug 22 01:12:55 2017 from web01
SSH批量管理
1.SSH的三个功能
- 远程登录 ssh [-p port] user@host
- 远程传输 scp 、rsync的ssh通道模式等
- 远程执行 ssh [-p port] user@host [“command”]
2.实现原理
当我们配置好密钥认证之后,ssh的远程执行就不需要交互输入密码了,从而我们就可以将一组ssh远程执行命令写入脚本,以脚本的形式实现批量管理。ssh的远程管理和saltstack不同,前者本质上还是挨个管理,后者才是真正的批量管理。
3.脚本案例
[oldgirl@m01 shell_code]$ cat view_ip.sh
#!/bin/bash
if [ $# -ne 1 ];then //首先判断参数的个数是否为1
/bin/echo "USAGE:/bin/sh $0 ARG1"
exit 1
fi
for n in 8 31 41 // for循环代替重复命令
do
/bin/echo ========172.16.1.$n=====
/usr/bin/ssh oldgirl@172.16.1.$n "$1"
done
几点说明:
1.为了脚本的通用性,我们将命令做为参数$1传入脚本,命令统一加上双引号,多条命令之间用分号隔开。同时为了避免环境变量和别名的影响,命令统一使用绝对路径。
[oldgirl@m01 shell_code]$ sh view_ip.sh "/sbin/ifconfig eth0 ; /bin/ps -ef"
2.批量管理中,为了避免代码重复,我们使用for循环来多次执行命令,for n in 后面接上待管理的主机IP,如果有变化只需修改这里的ip即可。
SSH批量分发
1.实现原理
批量分发本质上是批量执行rsync命令,将待分发的文件同步到指定的目录。但由于某些目录普通用户没有权限写入,所以对于远端用户我们需要用sudo进行提权。所以,我们将待分发的文件先传输到远端用户的家目录,然后再由远端用户sudo执行rsync命令将家目录的文件同步至最终目录。
2.脚本案例
[oldgirl@m01 shell_code]$ cat fenfa.sh
#!/bin/bash
if [ $# -ne 2 ];then
/bin/echo "USAGE:/bin/sh $0 [file] [dir]"
exit 1
fi
. /etc/init.d/functions
for n in 8 31 41
do
/bin/cp ~/$1 ~/$1_$(date "+%F_%T").bak >/dev/null 2>&1 &&\
/usr/bin/scp ~/$1 oldgirl@172.16.1.$n:~ >/dev/null 2>&1 &&\
/usr/bin/ssh -t oldgirl@172.16.1.$n "/usr/bin/sudo /usr/bin/rsync ~/$1 $2 ">/dev/null 2>&1
if [ $? -eq 0 ];then
action "fenfa hosts 172.16.1.$n" /bin/true
else
action "fenfa hosts 172.16.1.$n" /bin/false
fi
done [oldgirl@m01 shell_code]$ sh fenfa.sh hosts /tmp
fenfa hosts 172.16.1.8 [ OK ]
fenfa hosts 172.16.1.31 [ OK ]
fenfa hosts 172.16.1.41 [ OK ]
几点说明:
1.传入的两个参数分别是家目录中的文件名和最终目录的绝对路径
2.分发文件之前首先进行备份,目的是为了回滚方便。当然如果有文件版本控制系统比如git,那么这里可以省略。
3.从脚本中可以发现,SSH批量分发管理核心是远程执行和FOR循环。
SSH认证原理和批量分发管理的更多相关文章
- Linux使用ssh公钥实现免批量分发管理服务器
ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 管理机器外网IP10.0.0.61(内网172.16.1.61) 服务器外网1 ...
- SSH批量分发管理
ssh服务认证类型主要有两个: 基于口令的安全验证: 基于口令的安全验证的方式就是大家一直在用的,只要知道服务器的ssh连接账户.口令.IP及开发的端口,默认22,就可以通过ssh客户端登陆到这台远程 ...
- (转)SSH批量分发管理&非交互式expect
目录 1 SSH批量分发管理 1.1 测试环境 1.2 批量管理步骤 1.3 批量分发管理实例 1.3.1 利用sudo提权来实现没有权限的用户拷贝 1.3.2 利用sudo提权开发管理脚本 1.3. ...
- (转)Linux SSH批量分发管理
Linux SSH批量分发管理 原文:http://blog.51cto.com/chenfage/1831166 第1章 SSH服务基础介绍 1.1 SSH服务 1.1.1SSH介绍 SSH是Sec ...
- ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs
ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs 第一部分:使用ssh key 实现服务器间的免密码交互登陆 步骤1: 安装openssh-clients [root@001 ...
- 【SSH项目实战三】脚本密钥的批量分发与执行
[SSH项目实战]脚本密钥的批量分发与执行 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载, ...
- 【SSH项目实战】脚本密钥的批量分发与执行【转】
[TOC] 前言 <项目实战>系列为<linux实战教学笔记>第二阶段内容的同步教学配套实战练习,每个项目循序衔接最终将组成<Linux实战教学笔记>第二阶段核心教 ...
- Linux实战教学笔记24:SSH连接原理及ssh-key
目录 第二十四节 SSH连接原理及ssh-key讲解 第1章 SSH服务 1.1 ssh介绍 1.2 知识小结 第2章 ssh结构 2.1 SSH加密技术 第3章 ssh服务认证类型 3.1 基于口令 ...
- [svc]ssh批量分发key/批量用户管理
centos6 sshpass批量分发key yum install sshpass -y ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" 命令说 ...
随机推荐
- 运动员最佳匹配问题 KM算法:带权二分图匹配
题面: 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势. ...
- 洛谷 P3952 时间复杂度 解题报告
P3952 时间复杂度 题目描述 小明正在学习一种新的编程语言A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会 ...
- UVA.10881 Piotr's Ants (思维题)
UVA.10881 Piotr's Ants (思维题) 题意分析 有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头.求解第T秒时 ...
- BZOJ1912 APIO2010 洛谷P3629 巡逻
Description: 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通过这些道路到达其 他任 ...
- 【简单算法】22.删除链表的倒数第N个节点
题目: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: ->->->->, 和 n = . 当删除了倒数第二个节点后,链表变为 -& ...
- ExtJs在页面上window再调用Window的事件处理
今天在开发Ext的过程中遇到了一个恶心的问题,就是在ext.window页面,点击再次弹出window时,gridpanel中的store数据加载异常,不能正常被加载,会出现缓存,出现该问题,是因为w ...
- HDU1573 线性同余方程(解的个数)
X问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- js ejs for语句的第二种遍历用法
var A = {a:1,b:2,c:3,d:"hello world"}; for(var k in A) { console.log(k,A[k]); var h = new ...
- 你还在用notifyDataSetChanged?
想到发这篇帖子是源于我的上一篇帖子#Testin杯#多线程断点续传后台下载 .帖子中讲述的项目使用了listView这个控件,而且自定义了adapter.在更新item的进度条时发现每次使用notif ...
- Weblogic 9.2 启动时报错 javax.xml.namespace.QName
启动Weblogic 时会报错.javax.xml.namespace.QName; local class incompatible: stream classdesc serialVersionU ...