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

摘要:
[ root@m01ssh]#/Etc/init。d/sshdload重新加载sshd:[OK]SSH密钥认证原则:1。客户端传输公钥需要SSH密码认证,因此密钥传输成功后应禁止密码登录和端口修改。密钥认证用于防止密码泄露、方便和批量管理。ssh的远程管理不同于saltstack。前者本质上是一个一个地管理,而后者是真正的批量管理。SSH批处理分发1。实现原则批量分发本质上是批量执行rsync命令,以将要分发的文件同步到指定的目录。

SSH密码认证原理

SSH认证原理和批量分发管理第1张

几点说明:

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密钥认证原理

SSH认证原理和批量分发管理第2张

几点说明:

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认证原理和批量分发管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android SurfaceViewdb2数据库创建删除主键约束和创建删除唯一键约束下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Git和Github库详细使用教程

SVN 是集中式或者有中心式版本控制系统,版本库是集中放在中央服务器的; Git 是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。 一、注册与安装 1、注册GitHub   GitHub官方网址:https://github.com   在浏览器中打开GitHub...

msi通过powershell安装、卸载

function install_msi($url) { $telemetry = @{ DisplayName = "Telemetry Service"; filename = "TelemetryServiceInstaller_x64.msi" Url = $url } Write-Host $tel...

wireshark 抓包过滤器使用

wireshark 抓包过滤器 过滤器分为抓包过滤器和显示过滤器,抓包过滤器会将不满足过滤条件的包丢弃,只保留满足条件的包,而显示过滤器则是对已抓取的包做过滤,过滤出满足条件的包。 显示过滤器可以保留全部的报数据,方便后期做流量分析,而抓包过滤器保留的数据有限,后期分析有局限性。 一、抓包过滤器 wireshark抓包是基于其内部的libpcap/wi...

基于数据库的vs2019的T4模版代码生成器(一)基于sqlserver数据库

总体介绍 参考文档: https://www.cnblogs.com/laozhang-is-phi/p/9757999.html 只想用 ADO.NET 搭建多层框架,动软代码生成器是一个不错的选择。 T4 (Text Template Transformation Toolkit) 是微软官方在 VisualStudio 2008+ 中开始使用的代码生...

ssh 免密码设置失败原因总结

先复习一下设置ssh免密码操作的步骤: 进入主目录 cd 生成公钥 ssh-keygen -t rsa -P '' (注:最后是二个单引号,表示不设置密码) 然后分发公钥到目标机器 ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@对方机器IP (注意不要忘记了参数-i) 注:ssh-copy-id -i 是最简单的办法,如果不用这...

hadoop安装笔记

 最近在学习hadoop,hadoop的安装过程如下 我选用的是ubuntu 14桌面版+hadoop3.1.1。 1,ubuntu的安装   需要准备的有:ubuntu镜像文件,VMware虚拟机   首先我们需要linux系统,但是由于平时大家基本都是使用windows系统,而且hadoop集群又需要多个节点,所以我们需要使用虚拟机,这里选用的是VM ...