SSH批量分发与管理

一、SSH服务介绍

SSH是Secure Shell Protocol的简写,由IETF网络工作小组制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后再进行数据传输,确保了传递的数据安全。

SSH是专为远程登录会话和其他网络服务提供的安全性协议。利用SSH协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境当中,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件。如telnet等。

SSH服务结构:

SSH服务是由服务端软件OpenSSH和客户端(常见的有SSH,SecureCRT,Xshell,Putty)组成,SSH服务默认使用22端口提供服务,它有两个不兼容的SSH协议版本,分别是1.x和2.x。

二、SSH服务认证类型

从SSH客户端来看,SSH服务主要有两种级别安全验证,具体级别如下:

1.基于口令的安全认证

2.基于密钥对的安全认证:基于密钥的安全认证也有windows客户端和linux客户端的区别。

三、SSH服务优化

修改sshd.conf

Port52113         #为了提高安全级别,建议改掉SSH服务默认连接端口
PermitRootLoginno  #root超级用户黑客都知道,建议禁止它(root)远程登陆
PermitEmptyPasswordsno   #禁止空密码登录
UseDNSno               #不使用DNS
GSSAPIAuthentication no   #加快SSH连接速度

四、SSH批量分发管理实战

批量分发数据或者文件

(1)添加系统账号,并修改密码

[[email protected]~]#useradd fenfa
[[email protected]~]#id fenfa
uid=503(fenfa) gid=503(fenfa) groups=503(fenfa)
[[email protected]~]#echo 123456|passwd --stdin fenfa

注意:所有被管理主机都要创建该用户

(2)创建密钥对

[[email protected] ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key(/home/fenfa/.ssh/id_dsa):
Created directory ‘/home/fenfa/.ssh‘.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:   #此处回车
Your identification has been saved in/home/fenfa/.ssh/id_dsa.
Your public key has been saved in/home/fenfa/.ssh/id_dsa.pub.
The key fingerprint is:        #此处回车
0e:99:ef:7f:2d:5c:36:88:79:09:7a:89:e0:d1:f7:[email protected]
The key‘s randomart image is:  #此处回车
+--[ DSA 1024]----+
|               |
|               |
|      .       |
|     oo. o    |
|    .+oS+ B o  |
|     .+o = * +  |
|       o. o = . |
|      .    + E |
|       .... .   |
+-----------------+

默认会在fenfa用户的家目录/home/fenfa/.ssh下生成两个文件:

id_dsa.pub   #公钥,权限644,分发给需要管理的主机

id_dsa      #私钥,权限600,保留在本地

(3)推送公钥到管理主机

实例为推送到192.168.0.111主机,192.168.0.112同样的方法推送

[[email protected]~]$ ssh-copy-id -i.ssh/id_dsa.pub "-p 22 <a href="mailto:[email protected]\" "="">[email protected]"
The authenticity of host ‘192.168.0.111(192.168.0.111)‘ can‘t be established.
RSA key fingerprint is85:83:52:21:20:dd:4a:7c:3c:df:ec:5a:de:a0:b4:82.
Are you sure you want to continueconnecting (yes/no)? yes
Warning: Permanently added ‘192.168.0.111‘(RSA) to the list of known hosts.
[email protected]‘s password:
Now try logging into the machine, with"ssh ‘-p 22 [email protected]‘", and check in:
 .ssh/authorized_keys                    #出现这个表示推送公钥成功
to make sure we haven‘t added extra keysthat you weren‘t expecting.

注意:ssh-copy-id的特殊应用

如果SSH修改成了特殊端口,如52113,那么,用上面的ssh-copy-id命令就无法进行分发公钥匙了。如果仍要使用ssh-copy-id的话,那么可能的解决方法有两个:

1.命令为: ssh-copy-id -i .ssh/id_dsa.pub "-p 52113 [email protected]"#特殊端口分发,要适当加引号

2.编辑vi /usr/bin/ssh-copy-id 在第41行做如下修改,见加粗部分

41 { eval "$GET_ID" ; } | ssh -p22 $1 "umask 077; test -d ~/.ssh ||

mkdir ~/.ssh ; cat >>~/.ssh/authorized_keys && (test -x /sbin/

restorecon && /sbin/restorecon~/.ssh ~/.ssh/authorized_keys >/d

ev/null 2>&1 || true)" ||exit 1  #在41行中的开头ssh后面和$1前面加入自定义的ssh端口

说明:ssh-copy-id的原理(ssh-copy-id -i .ssh/id_dsa.pub "-p52113 [email protected]")

就是把.ssh/id_dsa.pub复制到192.168.0.111的fenfa用户家目录下面的.ssh目录(提前创建,权限为700)下,并做了更改名字的操作,名字改为authorized_keys,权限变为600.

(4)检查被管理主机上的公钥

 [[email protected] ~]$ ll .ssh/
total 4
-rw------- 1 fenfa fenfa 598 Jul 25 22:59authorized_keys
 [[email protected] ~]$ ll .ssh/
total 4
-rw------- 1 fenfa fenfa 598 Jul 25 22:47authorized_keys

(5)批量分发测试

[[email protected] ~]$ whoami
fenfa
[[email protected] ~]$ echo 123 >a.txt
[[email protected] ~]$ ll
total 4
-rw-rw-r-- 1 fenfa fenfa 4 Jul 26 00:00a.txt
[[email protected] ~]$ cat a.txt
123
[[email protected] ~]$ scp -P22 a.txt [email protected]:~
a.txt                                 100%   4     0.0KB/s   00:00   
[[email protected] ~]$ scp -P22 a.txt [email protected]:~
a.txt                                 100%    4    0.0KB/s   00:00

批量分发脚本:

①建立被管理主机地址库

②创建批量分发脚本

实例:将分发主机(192.168.1.114)家目录的text.txt文件分发到被管理主机(192.168.1.113,192.168.1.115)

[[email protected]_04 ~]$ cat ip.txt 
192.168.1.113
192.168.1.115
[[email protected]_04 ~]$ cat plfenfa.sh 
#!/bin/bash
. /etc/profile
. /etc/init.d/functions
File_name=test.txt
File_dir=/home/fenfa
Fenfa_user=fenfa
for ip in `cat /home/fenfa/ip.txt`
  do 
    rsync -avz -e "ssh -p52113" ${File_dir}/$File_name ${Fenfa_user}@$ip:~
    action "${Fenfa_user}@$ip ${File_dir}/$File_name copy" /bin/true
done
[[email protected]_04 ~]$ 
[[email protected]_04 ~]$ sh plfenfa.sh 
sending incremental file list
test.txt
 
sent 91 bytes  received 37 bytes  256.00 bytes/sec
total size is 9  speedup is 0.07
[email protected] /home/fenfa/test.txt copy                    [  OK  ]
sending incremental file list
test.txt
 
sent 91 bytes  received 31 bytes  244.00 bytes/sec
total size is 9  speedup is 0.07
[email protected] /home/fenfa/test.txt copy                    [  OK  ]

小结:

1)免密码登陆验证是单向的(管理主机--->被管理主机)

2)基于用户的,最好不要跨不同的用户

3)批量分发初始都需要输入一次密码,并且第一次连接要确认

(6)sudo对分发用户fenfa提权

root用户,visudo命令修改

在文件结尾加入一下内容:

fenfa  ALL=(ALL)       NOPASSWD:/bin/cp

说明:


fenfa


ALL


(ALL)


NOPASSWD


/bin/cp


使用sudo的用户


允许使用sudo的主机


使用sudo免密码


使用sudo可以执行的命令,如果是允许所有命令填NOPASSWD:ALL

root用户,vim /etc/sudoers直接修改sudoers文件,同理添加同上面的内容

五、利用expect脚本实现免交互ssh密钥分发

1)安装expect执行环境

2)expect批量分发,免交互脚本示例

主要有两部分:fenfa_sshkey.exp和fenfa.sh ,使用时直接执行fenfa.sh即可

[[email protected]_05 scripts]# cat fenfa_sshkey.exp 
#!/usr/bin/expect
if { $argc != 2 } {
 send_user "usage: expect fenfa_sshkey.exp file host\n"
 exit
}
#define var
set file [lindex $argv 0]
set host [lindex $argv 1]
set password "123456"           ##分发帐号的密码
set user "fenfa"                  ##分发帐号
set port "52113"                ##分发主机的ssh端口
spawn ssh-copy-id -i  $file  "-p  $port  [email protected]$host"
expect {
        "yes/no"    {send "yes\r";exp_continue}
        "*password" {send "$password\r"}
}
expect eof
[[email protected]_05 scripts]# cat fenfa.sh 
#!/bin/bash
Ipaddr_head=192.168.1
User=fenfa
Port=52113
Commond_dir=/usr/bin
if [ $UID -ne 0 ]
  then 
   echo "Error:Please use root account to exec this script!"
 else
   for n in `seq 5`
      do
      ${Commond_dir}/ssh-copy-id -i "-p $Port ${User}@${Ipaddr_head}.$n" &2>/dev/null
      if [ $? -eq 0  ] 
        then
           action "${Ipaddr_head}$n copy ssh_key..."  /bin/ture
        else
            action "${Ipaddr_head}$n copy ssh_key..."  /bin/false
      fi
   done
fi
时间: 2024-10-29 19:06:23

SSH批量分发与管理的相关文章

第三十天-ssh key企业批量分发自动化管理案例

本文实现一个应用ssh key 批量分发案例 目录 一.ssh key 原理及案例原理简图 1.ssh key 简介 2.rsa和dsa区别 3.ssh-copy-id的特殊应用 4.ssh-copy-id的原理 5.案例简图 二.操作步骤 三.具体实现步骤 服务端A: 客户端B: 客户端C: 四.ssh 批量分发与管理方案小结 五.企业级生产场景批量管理,自动化管理方案 一.ssh key 原理及案例原理简图 1.ssh key 简介 特别提示:在整个方案实现中,公钥(public key)和

SSH服务及批量分发与管理实战

SSH服务 一.SSH服务介绍 SSH是Secure Shell Protocol的简写,由IETF网络工作小组制定:在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后再进行数据传输,确保了传递的数据安全. SSH是专为远程登录会话和其他网络服务提供的安全性协议.利用SSH协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境当中,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件.如telnet等. SSH服务功能: a.类似telnet远程

ssh key密钥认证实现批量分发、管理、部署

在实际生产环境中,如果需要批量管理和部署服务器,可以采用ssh+key秘钥认证,然后可以免密码进行数据分发,服务部署及管理. SSH服务(TCP端口号22):安全的命令解释器 为客户机提供安全的Shell 环境,用于远程管理 SSH基于公钥加密(非对称加密)技术: 数据加密传输: 客户端和服务器的身份验证: 公钥 和 私钥   是成对生成的,这两个密钥互不相同,两个密钥可以互相加密和解密:不能根据一个密钥而推算出另外一个密钥: 公钥对外公开,私钥只有私钥的持有人才知道. ssh批量分发 首先需要

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

目录 1 SSH批量分发管理 1.1 测试环境 1.2 批量管理步骤 1.3 批量分发管理实例 1.3.1 利用sudo提权来实现没有权限的用户拷贝 1.3.2 利用sudo提权开发管理脚本 1.3.3 利用rsync来实现增量备份 1.4 SSH批量管理分发脚本实战 1.5 SSH批量管理总结 2 非交互式expect 2.1 非交互式生成密钥及实现批量管理 2.2 一键批量安装httpd服务 2.3 一键自动化50台规模集群网站 1 SSH批量分发管理 基于口令的,如何实现批量管理:expe

ssh批量分发服务搭建

SSH批量分发服务 1. 系统环境 [[email protected] ~]# uname -a Linux A 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 2203:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]# ifconfig eth0 | grep 'inet addr' |awk'{print $2}'|awk -F':' '{print $2}' 10.0.0.3

sshkey批量分发,管理方案

title: ssh 批量分发tags: sshkey,批量,分发grammar_cjkRuby: true sshkey批量分发,管理方案 1. 批量发简述 linux运维工程师,每天都需要维护大量的主机,特别是互联网公司的运维工程师,需要看大量的日志,硬件状态信息,服务状态信息,有时候甚至要导入大量文件或者配置文件,这样的话,如果你还一台一台登录操的话,效率低下不用说,每天的工作往往是满满的负荷工作,而且是机械式的一台一台看.但是如果你了解熟悉ssh就不一样了,ssh可以通过主机间的互信,来

SSH批量分发管理

IT公司企业级批量分发\管理方案(分发,批量部署.执行命令.批量管理)1.中小企业最基本实用的sshkey密钥管理方案2.门户网站puppet (复杂,太重)sina3.赶集,小米SALSTACK批量管理(轻量) SSH server: 1.SSH服务 2.SFTP服务(vsftp,proftp)ssh client: 特别提醒:SSH客户端(ssh)还包含一个很有用的远程安全拷贝命令scp,也是通过ssh协议工作的. 知识小结:(openssh负责连接 openssl负责加密) 1.ssh是安

ssh服务及批量分发自动化管理

Ssh服务知识: Ssh包含openssh和openssl两种包. Ssh客户端包含ssh连接工具及scp拷贝.slogin.sftp等应用程序. Less /etc/ssh/sshd_config这是查看服务端配置,sshd是服务端,ssh是客户端 ~/.ssh/known_hosts当客户端ssh服务端后会在本地的这个位置放一个名为known_hosts的公钥. 这个文件里可能有多个密钥,因为可能连了多个服务器. 两种连接方式: Ssh -p22 x.x.x.x     -p22是默认可以忽

7)SSH批量管理分发项目

ssh服务认证类型介绍 从SSH客户端来看,SSH服务主要提供两种级别的安全验证,具体级别如下: 基于口令的安全验证: 基于口令的安全验证的方式就是大家一直在用的,只要知道服务器的SSH连接账号和口令,应用服务器的IP及开放的端口,默认为22,就可以通过SSH客户端登录到这台远程主机.此时,联机过程中所有传输的数据都是加密的. 基于口令的我们可以通过expect,pssh,sshpass实现批量管理. 期中集群:一键搭建及优化50台服务器集群 基于密钥的安全验证: 基于密钥的安全验证方式是指,需