1. 程式人生 > >SSH批量分發管理&非互動式expect

SSH批量分發管理&非互動式expect

目錄

1 SSH批量分發管理

基於口令的,如何實現批量管理:expect、pssh、sshpass

期中架構分享

1.1 測試環境

m01(Server)

eth0:192.168.90.61/24
eth1:172.16.1.61/24

nfs01(Client)

eth0:192.168.90.31/24
eth1:172.16.1.31/24

backup(Client)

eth0:192.168.90.41/24
eth1:172.16.1.41/24

web01(Client)

eth0:192.168.90.8/24
eth1:172.16.1.8/24

1.2 批量管理步驟

1、建立使用者及密碼

2、m01建立金鑰對

3、m01分發公鑰

預設22埠可以不指定埠

若更改過的埠,需要指定-p埠

4、測試

測試成功的話連線後就不用密碼了

[[email protected] ~]# useradd oldgirl
[[email protected] ~]# echo 123456|passwd --stdin oldgirl
更改使用者 oldgirl 的密碼 。
passwd: 所有的身份驗證令牌已經成功更新。
[[email protected]
~]# id oldgirl uid=501(oldgirl) gid=501(oldgirl) 組=501(oldgirl) [[email protected] ~]# su - oldgirl [[email protected] ~]$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/oldgirl/.ssh/id_dsa): Created directory '/home/oldgirl/.ssh'. Enter passphrase (empty for
no passphrase): Enter same passphrase again: Your identification has been saved in /home/oldgirl/.ssh/id_dsa. Your public key has been saved in /home/oldgirl/.ssh/id_dsa.pub. The key fingerprint is: bf:44:68:f3:eb:6b:03:28:45:21:24:fb:dd:e9:b0:cf [email protected] The key's randomart image is: +--[ DSA 1024]----+ | ..o .. | | o .. | | . . | | . ... o | | ..o.S . | | . .=.= | | .. ..+ | | o .oo | | Eo=o | +-----------------+ [[email protected] ~]$ ll .ssh/ 總用量 8 -rw------- 1 oldgirl oldgirl 668 210 19:36 id_dsa #鑰匙 -rw-r--r-- 1 oldgirl oldgirl 601 210 19:36 id_dsa.pub #鎖 #非互動式建立金鑰 1、ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1 2、echo -e "\n" | ssh-keygen -t dsa -N "" #傳送公鑰(下面這個只能傳送公鑰) 沒改埠:ssh-copy-id -i .ssh/id_dsa.pub [email protected] 改埠:ssh-copy-id -i .ssh/id_dsa.pub "-p 52113 [email protected]" #測試 [[email protected] ~]$ ssh -p 52113 [email protected]172.16.1.31 /sbin/ifconfig eth0 [[email protected] ~]$ ssh [email protected]172.16.1.8 /sbin/ifconfig eth0 [[email protected] ~]$ ssh [email protected]172.16.1.41 /sbin/ifconfig eth0 #若要批量檢視每個系統的版本,可以直接寫成指令碼,把上面的三條命令都寫成指令碼然後執行。 vi ssh.sh ssh -p 52113 [email protected]172.16.1.31 /sbin/ifconfig eth0 ssh [email protected]172.16.1.8 /sbin/ifconfig eth0 ssh [email protected]172.16.1.41 /sbin/ifconfig eth0

1.3 批量分發管理例項

例:把所有伺服器上的hosts解析檔案給更新一遍,hosts檔案內容如下

cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5      lb01
172.16.1.6      lb02
172.16.1.7      web01
172.16.1.8      web02
172.16.1.51     db01 db01.etiantian.org
172.16.1.31     nfs01
172.16.1.41     backup
172.16.1.61     m01

企業裡實現ssh的3種方案:

1、直接root ssh key。

條件:允許root ssh登入

2、利用sudo提權來實現沒有許可權的使用者拷貝

3、利用suid來實現沒有許可權的使用者拷貝(工作中不建議使用suid)

曲線救國的方式,可以先用scp把hosts檔案拷貝到對方主機的家目錄下,然後再給rsync或其它拷貝命令授權以suid(chmod u+s `which rsync`)。之後再用ssh連線執行遠端拷貝功能(前提是rsync已經被授權suid)操作命令如下:

ssh -p 52113 hosts oldgirl@172.16.1.31:~
ssh -p 52113 oldgirl@172.16.1.31 /usr/bin/rsync ~/hosts /etc/hosts

1.3.1 利用sudo提權來實現沒有許可權的使用者拷貝

指定一個使用者,讓他可以執行某個命令:

visudo
oldgirl ALL=(ALL) NOPASSWD:/usr/bin/rsync

自動化管理

echo "oldgirl   ALL=(ALL) NOPASSWD:/usr/bin/rsync" >>/etc/sudoers
visudo -c

實現遠端sudo

兩種方法:
第一種:註釋掉/etc/sudoers檔案中的Defaults requiretty
第二種(推薦):ssh 加-t選項,在執行遠端ssh時可以開啟終端,然後就可以sudo用了。

scp -P52113 hosts oldgirl@172.16.1.31:~
ssh -p52113 -t oldgirl@172.16.1.31 sudo /usr/bin/rsync ~/hosts /etc/hosts

1.3.2 利用sudo提權開發管理指令碼

[oldgirl@m01 ~]$ cat fenfa_file.sh 
scp -P52113 hosts oldgirl@172.16.1.31:~
ssh -p52113 -t oldgirl@172.16.1.31 sudo /usr/bin/rsync ~/hosts /etc/hosts
scp hosts oldgirl@172.16.1.41:~
ssh -t oldgirl@172.16.1.41 sudo /usr/bin/rsync ~/hosts /etc/hosts
scp  hosts oldgirl@172.16.1.8:~
ssh -t oldgirl@172.16.1.8 sudo /usr/bin/rsync ~/hosts /etc/hosts

1.3.3 利用rsync來實現增量備份

rsync -avz hosts -e 'ssh -p 52113' oldgirl@172.16.1.31:~

#這樣的方法有兩種好處

1、增量
2、加密

工作中的跳板機(堡壘機)一定要保護的很安全,就是批量管理的機器

1、防火牆

2、監聽內網

3、不給外網IP

4、ssh防護好,禁止root登入

1.4 SSH批量管理分發指令碼實戰

所有伺服器端ssh埠最好都一致

#一個簡單的可以讓所有伺服器執行命令的指令碼
[[email protected] scripts]$ cat ssh_view.sh 
#!/bin/bash
. /etc/init.d/functions

export PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldgirl/bin

if [ $# -ne 1 ];then
    echo "USAGE:$0 ARG"
    exit 1
fi

#由於我的埠沒有一致,故只測試31這一個改過埠的伺服器
for n in 31
do
    echo =============172.16.1.$n=============
    ssh -p52113 [email protected]172.16.1.$n "$1"
done
#######測試
[[email protected] scripts]$ bash ssh_view.sh "cat /etc/redhat-release"
=============172.16.1.31=============
CentOS release 6.9 (Final)
[[email protected] scripts]$ bash ssh_view.sh "tail -1 /etc/inittab"
=============172.16.1.31=============
id:3:initdefault:
#可以批量管理伺服器的拷貝檔案的指令碼
[[email protected] scripts]$ cat fenfa_file1.sh 
#!/bin/bash
. /etc/init.d/functions
if [ $# -ne 2 ];then
    echo "USAGE:$0 ARG1 ARG2"
    exit 1
fi

for n in 8 41 31
do
  scp ~/$1 [email protected]172.16.1.${n}:~ >/dev/null 2>&1 &&\
  #備份,可以不做
#ssh -t [email protected]${n} sudo /usr/bin/rsync /etc/hosts /etc/hosts_$(date +%F-%H:%M:%S)
  ssh -t [email protected]172.16.1.${n} 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.$n" /bin/false
  fi
done

1.5 SSH批量管理總結

1、利用root做ssh key驗證。

優點:簡單,易用

缺點:安全差,同時無法禁止root遠端連線這個功能

企業應用:80%的中小企業。

2、利用普通使用者如oldgirl來做

思路是先把分發的檔案拷貝到伺服器使用者家目錄,然後sudo提權拷貝分發的檔案到遠端伺服器的對應許可權目錄。

優點:安全。無需停止root遠端連線這個功能。

缺點:配置比較複雜。

3、拓展:同方案2,只是不用sudo,而是設定suid對固定命令提權。

優點:相對安全

缺點:負載,安全性較差。任何人都可以處理帶有suid許可權的命令。

建議:

  1. 追求簡單可以選1

  2. 追求安全建議選2

  3. 有能力可以用puppet、saltstack。

  4. suid:普通使用者裕興程式,沒有許可權時也可以suid,然後執行,必須是編譯好的程式命令。

puppet:早起大網站使用的

saltstack(*):可以裝客戶端

ansible(*):優點:不用裝客戶端,直接ssh就可以

4、企業級生產場景批量管理,自動化管理方案:

1)最簡單常用ssh key,功能最強大的。一般中小型企業會用,50-100臺以下。

2)sina cfengine、puppet 較早的批量管理工具。現在基本上沒有企業用。

3)門戶級別比較流行的,puppet批量管理工具,複雜,笨重。

4)saltstack批量管理工具,特點:簡單,功能強大(配置複雜),趕集網、小米等一些CDN公司會使用

5)http+cron

批量管理路線:ssh key–>cfengine–>puppet–>saltstack/ansible

輕鬆實現遠端批量拷貝檔案指令碼部落格:

SSH連線慢的解決:

2 非互動式expect

非互動式工具:expect(一門語言)、sshpass、pssh

expect:預設沒有安裝,需要先安裝再使用

[root@m01 ~]# yum install expect -y
[root@m01 ~]# rpm -qa expect
expect-5.44.1.15-5.el6_4.x86_64
#裝完expect後會附帶一個隨機密碼生成工具mkpasswd
[root@m01 ~]# mkpasswd 
tnhu1LM9$
[root@m01 ~]# mkpasswd 
Y1]taHax9
[root@m01 ~]# mkpasswd -l 10   #-l 指定隨機密碼長度
GSg[yeyv10
[root@m01 ~]# mkpasswd -l 15
nb/Wayrtj9ww0vE

2.1 非互動式生成金鑰及實現批量管理

1、所有機器建立使用者及密碼
useradd oldgirl888
echo 123456|passwd --stdin oldgirl
id oldgirl888
su - oldgirl888
2、管理機建立金鑰
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1
3、自動分發金鑰
vim 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"

spawn ssh-copy-id -i $file [email protected]$host
expect {
    "yes/no"    {send "yes\r";exp_continue}
    "*password" {send "$password\r"}
}
expect eof

exit -onexit {
  send_user "Oldboy say goodbye to you!\n"
}
[[email protected] scripts]$ expect fenfa_sshkey.exp ../.ssh/id_dsa.pub 172.16.1.41

一個指令碼都分發:

cat /server/scripts/fenfa_sshkey.sh
#!/bin/bash
#
. /etc/init.d/functions

for i in 128 129
do 
  expect fenfa_sshkey.exp ~/.ssh/id_dsa.pub 192.168.90.$i >/dev/null 2>&1
  if [ $? -eq 0 ]
  then
    action "$i" /bin/true
  else
    action "$i" /bin/false
  fi
done

2.2 一鍵批量安裝httpd服務

1、準備工作:
useradd oldboy
echo 123456|passwd --stdin oldboy
id oldboy
2sudo提權實現沒有許可權使用者拷貝
配置sudoers:
echo "oldboy ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers
visudo -c
su - oldboy

自動分發指令碼
[[email protected] scripts]$ cat sshkey_install.sh 
#!/bin/bash
#
. /etc/init.d/functions

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

# Product key pair
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa > /dev/null 2>&1
  if [ $? -eq 0 ];then
    action "Create dsa $ip" /bin/true
  else
    action "Create dsa $ip" /bin/false
    exit 1
  fi

#dis pub key
for i in 128 129
do 
  expect ~/scripts/fenfa_sshkey.exp ~/.ssh/id_dsa.pub 192.168.90.$i >/dev/null 2>&1
  if [ $? -eq 0 ];then
    action "$i" /bin/true
  else
    action "$i" /bin/false
  fi
done

#dis fenfa scripts
for n in 128 129
do
  scp -rp ~/scripts ol[email protected]192.168.90.$n:~
done

#install service
for m in 128 129
do
  ssh -t [email protected]192.168.90.$m sudo /bin/bash ~/scripts/install.sh
done

cat /scripts/install.sh
yum install httpd -y

2.3 一鍵自動化50臺規模叢集網站

思路:
自動化的基礎:

a.搭建yum倉庫
b.定製rpm包

1、ssh key + expect

a.kickstart無人值守安裝Linux系統(自動建立使用者、密碼、優化)
b.分發機上建立金鑰對、批量發走公鑰(expect)
c.寫安裝優化指令碼、批量發到各個伺服器上,遠端執行安裝

2、高階架構師知識搞定的一套叢集方案

a.cobbler無人值守安裝Linux系統(自動建立使用者、密碼、優化、salt客戶端)
b.服務端salt上,建立認證,寫配置來批量安裝管理各個節點伺服器應用。

3、高階架構師知識搞定的一套叢集方案

a.kvm虛擬化、根據不同的業務提前做好映象
b.通過與計算工具OpenStack管理映象,批量生成五個虛擬機器
c.服務端salt上,建立認證,寫配置來批量安裝管理各個節點伺服器應用。

4、docker

相關推薦

SSH批量分發管理&互動式expect

目錄 1 SSH批量分發管理 基於口令的,如何實現批量管理:expect、pssh、sshpass 期中架構分享 1.1 測試環境 m01(Server) eth0:192.168.90.61/24 eth1:172.1

(轉)SSH批量分發管理&交互式expect

decorator lb02 init.d pssh expect num 環境 網站 準備工作 目錄 1 SSH批量分發管理 1.1 測試環境 1.2 批量管理步驟 1.3 批量分發管理實例 1.3.1 利用sudo提權來實現沒有權限的用戶拷貝 1.3.2

SSH批量分發管理

-h 安全認證 基於 fin ssh服務 save 私鑰 ack 生成 IT公司企業級批量分發\管理方案(分發,批量部署、執行命令、批量管理)1、中小企業最基本實用的sshkey密鑰管理方案2、門戶網站puppet (復雜,太重)sina3、趕集,小米SALSTACK批量管

Linux使用ssh公鑰實現免批量分發管理服務器

-i 服務器 公鑰 外網 config mar 密鑰對 amp OS ssh 無密碼登錄要使用公鑰與私鑰。linux下可以用用ssh-keygen生成公鑰/私鑰對,下面我以CentOS 6.6為例。 管理機器外網IP10.0.0.61(內網172.16.1.61) 服務器外

ssh key密鑰認證實現批量分發管理、部署

ssh免密認證、批量分發在實際生產環境中,如果需要批量管理和部署服務器,可以采用ssh+key秘鑰認證,然後可以免密碼進行數據分發,服務部署及管理。 SSH服務(TCP端口號22):安全的命令解釋器為客戶機提供安全的Shell 環境,用於遠程管理SSH基於公鑰加密(非對稱加密)技術: 數據加密傳輸; 客戶端

使用expect 批量分發ssh公鑰

expect#!/usr/bin/expect if {$argc != 2} { #首先註意大話號,彼此之間需要空格 send_user "USAGE:expect_sshkey.exp file host" exit } #define var set file [lindex $argv 0

ssh批量管理分發項目實戰介紹與實踐

linuxssh認證類型:基於口令的安全驗證,批量管理?expect,pssh,sshpassm01機器(鑰匙)私鑰被管理機器(鎖)公鑰 m01nfs01backupweb011、在上面4臺機器上面操作:創建用戶及密碼useradd oldgirlecho 123456|passwd --stdin

ssh服務及批量分發自動化管理

互聯網Ssh服務知識:Ssh包含openssh和openssl兩種包。Ssh客戶端包含ssh連接工具及scp拷貝、slogin、sftp等應用程序。Less /etc/ssh/sshd_config這是查看服務端配置,sshd是服務端,ssh是客戶端~/.ssh/known_hosts當客戶端ssh服務端後會

ssh批量管理批量分發

1 SSH SSH是安全的加密協議,用於遠端連線linux伺服器。 SSH預設埠是22,有SSH1(有漏洞)、SSH2 兩個版本。 SSH服務端主要包含兩個服務功能SSH遠端連線,SFTP服務。 Linux SSH客戶端包含SSH遠端連線命令,以及遠端拷貝SCP命令等。   1.1

Shell腳本實現ssh免密登錄及批量配置管理

ssh免密登錄 批量部署管理 shell一鍵實現腳本 本節索引場景分析ssh免密登錄pssh工具批量管理SHELL自動化腳本本篇總結場景分析作為一個運維工程師,不是每個人工作的環境都想阿裏、騰訊那樣,動不動就上億的PV量,上萬臺服務器。我們通常還是工作在,幾十臺上百臺服務器這樣的環境,而使用ans

雞蛋學運維-3:ssh批量管理配置

ssh說明:系統環境CentOS release 6.5 (Final) 2.6.32-431.el6.x86_641.添加分發用戶useradd oldgirlecho 123456|passwd stdin --oldgirl2.利用rsync用戶名進行sudo提取cp權限並用-c檢查語法echo ‘o

expect批量分發密鑰文件

expect在做批量分發的時候第一次是兩個腳本來完成,後來做了一個expect嵌套,完成了一個腳本進行集成前提要求服務器需要安裝expect[root@130 scripts]# yum -y install expect腳本分析:#!/bin/bash key_file=‘/root/.ssh/id_dsa

使用ansible 批量分發ssh密鑰

ssh ansi back ans alt clas ansible host image 先看執行結果 看看ssh.yml怎麽寫的 看看hosts文件中backup組怎麽寫的 使用ansible 批量分發ssh密鑰

ssh密鑰分發之二:使用sshpass配合ssh-kopy-id編寫腳本批量分發密鑰:

pre The stk 成功 安裝 word ping通 root賬戶 str 使用sshpass配合ssh-kopy-id編寫腳本批量分發密鑰: 首先sshpass是一個ssh連接時的免交互工具,首先要安裝一下: yum install sshpass -y 接下

ssh配置詳解及公私鑰批量分發

www pass 自帶 ansi ble 配置詳解 ans nbsp ssh配置文件 第一:ssh配置文件詳解 第二:ssh公私密鑰的生成 第三:ssh公鑰分發之一:ssh自帶工具ssh-copy-id工具分發 第四:ssh公鑰分發之二:編寫sshpass腳本批量分發

sshkey批量分發管理方案

批量 分發 批量管理 sshkey title: ssh 批量分發tags: sshkey,批量,分發grammar_cjkRuby: true sshkey批量分發,管理方案 1. 批量發簡述 linux運維工程師,每天都需要維護大量的主機,特別是互聯網公司的運維工程師,需要看大量的日誌,硬

Web叢集之SSH批量管理

1、什麼是SSH批量管理在管理機產生公鑰和私鑰,然後把自己的公鑰推送給需要被管理的伺服器,然後就可以通過scp和ssh命令,無需輸入密碼即可管理 鎖=公鑰,鑰匙=私鑰 企業裡實現ssh方案:1)直接root ssh key。條件:系統允許root使用ssh2)sudo提權來實現沒有許可權使用者拷貝

Web集群之SSH批量管理

gre linux i++ save only ffffff code ref 圖片 1、什麽是SSH批量管理在管理機產生公鑰和私鑰,然後把自己的公鑰推送給需要被管理的服務器,然後就可以通過scp和ssh命令,無需輸入密碼即可管理 鎖=公鑰,鑰匙=私鑰 企業裏實現ssh方案

ssh原理及管理分發公鑰方法

ssh原理:在SSH安全協議的原理中, 是一種非對稱加密與對稱加密演算法的結合。 ssh登入有2種方法:賬號密碼登入和公鑰登入。 1.帳號密碼登入,沒辦法公證,不像https有CA證書公證。 1.服務端收到登入請求後,首先互換公鑰。 2.客戶端用服務端的公鑰加密賬號密碼併發送 3.服務端用自