1. 程式人生 > >ssh key密鑰認證實現批量分發、管理、部署

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

ssh免密認證、批量分發

在實際生產環境中,如果需要批量管理和部署服務器,可以采用ssh+key秘鑰認證,然後可以免密碼進行數據分發,服務部署及管理。

SSH服務(TCP端口號22):安全的命令解釋器

為客戶機提供安全的Shell 環境,用於遠程管理

SSH基於公鑰加密(非對稱加密)技術: 數據加密傳輸; 客戶端和服務器的身份驗證;

公鑰 和 私鑰 是成對生成的,這兩個密鑰互不相同,兩個密鑰可以互相加密和解密;不能根據一個密鑰而推算出另外一個密鑰;

公鑰對外公開,私鑰只有私鑰的持有人才知道。

ssh批量分發


首先需要創建公鑰私鑰,然後將公鑰放到client端,私鑰留在分發端。

公鑰相當於鎖,私鑰相當於鑰匙。

我這裏是采用普通用戶,root用戶認證不建議,存在安全隱患。

ssh-keygen -t dsa

[[email protected] .ssh]# ll

total 8

-rw------- 1 tuwei tuwei 668 Apr 27 13:57 id_dsa

-rw-r--r-- 1 tuwei tuwei 608 Apr 27 13:57 id_dsa.pub

然後將公鑰拷貝到其他client端。

ssh-copy-id -i id_dsa.pub [email protected]:~拷貝到遠端的家目錄

[[email protected] .ssh]$ ll

total 4

-rw-------. 1 tuwei tuwei 1216 Apr 30 01:49 authorized_keys

註意:采用ssh-copy-id腳本將公鑰拷貝到遠端,在遠端會生成一個.ssh目錄(目錄權限為700)。文件權限為600,不能作更改。

做好分發後進行測試,通過ssh連接到遠端

[[email protected] ~]$ ssh [email protected]

Last login: Mon May 8 10:28:31 2017 from 192.168.1.10

Hi,welcome to the linux learning class

keep on learning

查看遠端ip

[[email protected] ~]$ ssh [email protected]

/* */ /sbin/ifconfig eth0

eth0 Link encap:Ethernet HWaddr 00:0C:29:41:0C:21

inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe41:c21/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:16454 errors:0 dropped:0 overruns:0 frame:0

TX packets:15218 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:1378538 (1.3 MiB) TX bytes:10704201 (10.2 MiB)

分發數據

數據分發時需要用到scp、rsync命令,而普通用戶沒有root權限,可以將普通用戶加上sudo,實現root操作。

echo “tuwei ALL=(ALL) NOPASSWD:/usr/bin/scp,/usr/bin/rsync,/bin/tar” >>/etc/sudoers

實際生產中可以將要分發數據權限改為普通用戶。

chown -R tuwei /tuwei

1. scp -P22 -r -p /tuwei [email protected]:~

2. ssh -t [email protected] sudo rsync -azP tuwei /etc

普通用戶對/etc是沒有可寫權限的,這裏采用兩步完成分發.可以寫個通用腳本進行批量管理。

#!/bin/sh

#write by tuwei at 20170501

################get the information of other nodes

PNAME=`basename $0`

print_usage() {

echo "Usage:"

echo "/bin/sh $PNAME command"

exit 1

}


#$1 ip


if [ $# -ne 1 ]; then

print_usage

fi


for ip in `cat all_client_ips.txt|grep -v ^#`

do


echo "start ip $ip $1 --------------------------"

ssh -p 22 tuwei@$ip $1 #########如果是分發,scp -P22 -r -p $1 tuwei@$ip:~

echo "end $ip $1 -------------------------------"

printf "\n"

done


本文出自 “學不思則惘 思不學則殆” 博客,請務必保留此出處http://tuwei.blog.51cto.com/11040555/1923537

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