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认证原理和批量分发管理的更多相关文章

  1. Linux使用ssh公钥实现免批量分发管理服务器

    ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 管理机器外网IP10.0.0.61(内网172.16.1.61) 服务器外网1 ...

  2. SSH批量分发管理

    ssh服务认证类型主要有两个: 基于口令的安全验证: 基于口令的安全验证的方式就是大家一直在用的,只要知道服务器的ssh连接账户.口令.IP及开发的端口,默认22,就可以通过ssh客户端登陆到这台远程 ...

  3. (转)SSH批量分发管理&非交互式expect

    目录 1 SSH批量分发管理 1.1 测试环境 1.2 批量管理步骤 1.3 批量分发管理实例 1.3.1 利用sudo提权来实现没有权限的用户拷贝 1.3.2 利用sudo提权开发管理脚本 1.3. ...

  4. (转)Linux SSH批量分发管理

    Linux SSH批量分发管理 原文:http://blog.51cto.com/chenfage/1831166 第1章 SSH服务基础介绍 1.1 SSH服务 1.1.1SSH介绍 SSH是Sec ...

  5. ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs

    ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs 第一部分:使用ssh key 实现服务器间的免密码交互登陆 步骤1: 安装openssh-clients [root@001 ...

  6. 【SSH项目实战三】脚本密钥的批量分发与执行

    [SSH项目实战]脚本密钥的批量分发与执行 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载, ...

  7. 【SSH项目实战】脚本密钥的批量分发与执行【转】

    [TOC] 前言 <项目实战>系列为<linux实战教学笔记>第二阶段内容的同步教学配套实战练习,每个项目循序衔接最终将组成<Linux实战教学笔记>第二阶段核心教 ...

  8. Linux实战教学笔记24:SSH连接原理及ssh-key

    目录 第二十四节 SSH连接原理及ssh-key讲解 第1章 SSH服务 1.1 ssh介绍 1.2 知识小结 第2章 ssh结构 2.1 SSH加密技术 第3章 ssh服务认证类型 3.1 基于口令 ...

  9. [svc]ssh批量分发key/批量用户管理

    centos6 sshpass批量分发key yum install sshpass -y ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" 命令说 ...

随机推荐

  1. 配置和修改springboot默认国际化文件

    SpringBoot默认国际化文件为:classpath:message.properties,如果放在其它文件夹中,则需要在application.properties配置属性spring.mess ...

  2. POJ1816:Wild Words——题解

    http://poj.org/problem?id=1816 比较麻烦的trie. 首先你需要选择针对n还是m建立trie,这里我选择了针对n. 那么就需要面临卡空间的问题. 这里提供了一种链式前向星 ...

  3. BZOJ1012:[JSOI2008]最大数——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1012 https://www.luogu.org/problemnew/show/P1198 现在 ...

  4. BZOJ3195:[JXOI2012]奇怪的道路——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3195 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方 ...

  5. HDOJ.1051 Wooden Sticks (贪心)

    Wooden Sticks 点我挑战题目 题意分析 给出T组数据,每组数据有n对数,分别代表每个木棍的长度l和重量w.第一个木棍加工需要1min的准备准备时间,对于刚刚经加工过的木棍,如果接下来的木棍 ...

  6. [NOI2017]蔬菜——时光倒流+贪心

    题目链接 题解: 貌似一眼看过去是一个贪心. 其他的算法要记录的东西就太多了. 部分分其实很高.但是没有什么提示. 想一些套路:二分?不行还要贪心判断. 分治?前后取法是有影响的. 时光倒流? 也许可 ...

  7. Indexing GROUP BY

    SQL databases use two entirely different group by algorithms. The first one, the hash algorithm, agg ...

  8. HDU 5650 异或

    so easy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  9. 关闭nginx日志

    在nginx.conf中将 access_log /dev/null; error_log /dev/null;

  10. 普通用户加sudo权限

    没配置之前希望在普通用户下,通过sudo命令,让用户暂时拥有root权限,并创建一个文件夹.很明显,失败了,错误原因是:该用户暂没有root权限.  解决办法如下 1.打开sudoers文件 切换到r ...