LINUX用戶建立秘鑰認證實現SHELL腳本管理,分發,部署

環境介紹

SSH Server

[root@vm1 ~]# ifconfig |awk '/broadcast/{print $2}'
192.168.99.241

SSH Client

[root@vm2 ~]# ifconfig |awk '/broadcast/{print $2}'
192.168.99.242

通過root用戶建立秘鑰認證實現[SHELL](http://www.showerlee.com/archives/tag/shell)腳本管理,分發,部署

首先`SSH Client端`創建密鑰對,并將公鑰分發給需要登錄的`SSH Server`

注:公鑰相當于鎖,私鑰相當于鑰匙,我們這里相當于在客戶端創建一對鑰匙和鎖,想要做到SSH免密碼登錄,就相當于我們將鎖分發到服務端并裝鎖,然后客戶端就可以利用鑰匙開鎖。

一、建立秘玥認證

1.在客戶端創建秘玥:(`SSH client`)

[root@vm2 ~]# su - root
Last login: Wed Dec 28 10:10:19 CST 2016 from 192.168.99.92 on pts/0
[root@vm2 ~]# ssh-keygen  -t dsa  # 一直回車即可
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): ^C
[root@vm2 ~]# ssh-keygen  -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
97:75:88:b8:ae:c5:38:b8:24:d7:8a:ce:2a:74:3e:f3 root@vm2
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|         . . .   |
|        . . o .  |
|         . o .   |
|        S o      |
| . . o + .       |
|. + + + +        |
|.. O o +         |
|oo+ *E.          |
+-----------------+
[root@vm2 ~]#

2.查看生成的秘鑰對:(`SSH Client`)

[root@vm2 ~]# ls -lda .ssh/
drwx------. 2 root root 76 Dec 28 10:26 .ssh/
[root@vm2 ~]# cd .ssh/
[root@vm2 .ssh]# ls -la
total 20
drwx------. 2 root root   76 Dec 28 10:26 .
dr-xr-x---. 5 root root 4096 Dec 28 10:25 ..
-rw-r--r--. 1 root root  395 Dec 18 23:16 authorized_keys
-rw-------  1 root root 1675 Dec 28 10:26 id_rsa
-rw-r--r--  1 root root  390 Dec 28 10:26 id_rsa.pub
-rw-r--r--  1 root root  176 Dec 19 18:41 known_hosts
[root@vm2 .ssh]#

秘玥生成完畢

3.將公鑰分發到`SSH Server`端

[root@vm2 ~]# ssh-copy-id  -i .ssh/id_rsa.pub  192.168.99.241
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.99.241's password: 
Permission denied, please try again.
root@192.168.99.241's password: 
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh '192.168.99.241'"
and check to make sure that only the key(s) you wanted were added.

4.`SSH Server端`查看收到的分發文件

[root@vm1 ~]# ls .ssh/
authorized_keys
[root@vm1 ~]# cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAlmq1z0G/7wbGuSUewfXlFnwzqCg/myqTi/AwP8LP+JJ49xzIKMzpeWXHD8RWIf5RlDzo+6N7uPK5O22x/QtMosi0egz4shavEJeUkO0EH+KygXXgBIGuMWmAsL+yzbgWXT9H3zdzXi/qWcrBeBv2nYB5mpYSf7o0xqdhCst1MTfcYLD8qxvkwC8RiqBA/1u9N6jeDFbHO+UzZYYCr9zgk9uz4Rrhb9BU7c1GhjUCgRwBDAuo47IHw/OT6KS9lb8lT2R/ujVoDARy/eOhw8cAFXo+QcvzNSW2qKf/Qo21uR/wz2u9SRV0lvUDNSvC2PYtR+iPlDwHY81md430yiNf9w== root@10.1.0.1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLBNDhvo+LBm93MXZDfHOOR9lo8OyZ8mKGQpTcf65/mFDhQXDXoewteIexXkKv8QEQLhEmhW94ChuKeAjTEwO50RAx8JiMDrxF9nI1mcMSxMrPk3+rH8q0g/HnIRf570mfFD5yjD+Ql/MQI8giveuxBakBDZzHXfBC2s++k3hyA77THsNGBUTLgxI8ZCxoWjkQhuZivz02iAVeIpzZESiCv+sRgEUgWsKKn4z5hvM7E7tyEbDFC7R/W0JPQstnkuk7uCMG2nPW9Mp9qrXTC0GhH1V7yFgEhsh+8hfmBpUkn7Nw/17YnSgwB3aoY7PPAKGdSo8JrIoeNNhw2IE2lr85 root@vm2

成功收到

5.`SSH Client 端`登錄驗證

[root@vm2 ~]# ssh 192.168.99.241
Last failed login: Wed Dec 28 10:32:38 CST 2016 from vm2 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Wed Dec 28 10:00:07 2016 from 192.168.99.92
[root@vm1 ~]# ifconfig |awk '/broadcast/{print $2}'
192.168.99.241

查看地址可以發現現在可以實現免輸入密碼就可以進行登錄了

注:這里遇到警告提示“Address 192.168.100.241 maps to bogon, but this does not map back to the address – POSSIBLE BREAK-IN ATTEMPT!”。

解決辦法為修改客戶端/etc/hosts文件,將服務端的ip地址與主機名對應關系寫進去就可以了。

    (ssh client)
    # echo "192.168.100.241  vm1" >> /etc/hosts

二、創建`SHELL`腳本實現批量管理(`SSh Client`)

1.創建腳本`manager.sh`

#!/bin/bash
#description: ssh test
#version:0.0.1
#author:Jerry <jerry@whitehouse.gov>
#date:2016-12-28
for ip in `cat iplist`;do
        echo "====$ip===="
        ssh $ip $1
done

2.生成ip列表

[root@vm2 rc.d]# echo "192.168.99.241" > iplist
[root@vm2 rc.d]# cat iplist 
192.168.99.241

3.執行腳本

[root@vm2 rc.d]# bash manager.sh 'df -h'
====192.168.99.241====
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        40G  193M   40G   1% /
devtmpfs        475M     0  475M   0% /dev
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           489M  6.8M  483M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda3        20G  2.6G   18G  13% /usr
/dev/sda1       485M  138M  348M  29% /boot
tmpfs            98M     0   98M   0% /run/user/0
[root@vm2 rc.d]#

如果有多臺,我們需要復制公鑰過去,而后追加ip地址到`iplist`文件中即可

三、創建SHELL腳本實現批量分發:(SSH Client)

1.創建腳本:`distribute.sh`

[root@vm2 rc.d]# vim distribute.sh
#!/bin/bash
for ip in `cat iplist`
do
        echo "=========$ip=========="
        scp -r -p $1 $ip:$2
done

2.查看腳本ip列表

[root@vm2 rc.d]# cat iplist 
192.168.99.241

3.執行腳本

將本地/root目錄下的文件分發到`SSH服務端`主機

[root@vm2 rc.d]# sh distribute.sh /root /tmp
=========192.168.99.241==========
.bash_logout                                                                        100%   18     0.0KB/s   00:00    
.bash_profile                                                                       100%  176     0.2KB/s   00:00    
.bashrc                                                                             100%  176     0.2KB/s   00:00    
.cshrc                                                                              100%  100     0.1KB/s   00:00    
.tcshrc                                                                             100%  129     0.1KB/s   00:00    
authorized_keys                                                                     100%  395     0.4KB/s   00:00    
known_hosts                                                                         100%  176     0.2KB/s   00:00    
id_rsa                                                                              100% 1675     1.6KB/s   00:00    
id_rsa.pub                                                                          100%  390     0.4KB/s   00:00    
anaconda-ks.cfg                                                                     100% 2612     2.6KB/s   00:00    
lastnotification                                                                    100%   11     0.0KB/s   00:00    
.bash_history                                                                       100%  620     0.6KB/s   00:00    
.Xauthority                                                                         100%  109     0.1KB/s   00:00    
.viminfo                                                                            100%  908     0.9KB/s   00:00    
[root@vm2 rc.d]#

在SSH server端進行查看驗證

[root@vm1 ~]# ls /tmp/
a.txt       ks-script-fCpUTO  root

可以看到分發成功

四、批量部署

這里的部署就結合了SHELL腳本批量管理和分發兩個功能。

因為此操作設計有安全隱患,所以不建議利用root進行批量管理操作。建議設置普通用戶,在利用sudo提權操作

通過普通用戶建立秘鑰認證并sudo提權進行管理,分發,部署

SSH  Serve端

[root@vm1 ~]# useradd  user1
[root@vm1 ~]# echo "123456" |passwd --stdin user1

SSH Client端

[root@vm2 ~]# useradd  user2                
[root@vm2 ~]# echo "123456"|passwd  --stdin user2
[root@vm2 ~]# su - user2
[user2@vm2 ~]$ ssh-keygen -t rsa  #默認輸入三個回車鍵
[user2@vm2 ~]$ ssh-copy-id  -i .ssh/id_rsa.pub user1@192.168.99.241
# 輸入“123456”,分發完成

驗證:

[user2@vm2 ~]$ ssh user1@192.168.99.241 /sbin/ifconfig  eno16777736
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.99.241  netmask 255.255.255.0  broadcast 192.168.99.255
        inet6 fe80::20c:29ff:fe93:c008  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:93:c0:08  txqueuelen 1000  (Ethernet)
        RX packets 14121  bytes 1502069 (1.4 MiB)
        RX errors 0  dropped 7  overruns 0  frame 0
        TX packets 2792  bytes 410399 (400.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#返回服務端IP地址即表明秘玥認證成功

此時,客戶端user2用戶現在可以免密碼分發到服務端user1所屬文件夾,但若想分發到root所屬文件夾,則需要sudo提權。

1.服務端`sudo`提權

[root@vm1 ~]# 
[root@vm1 ~]# su - user1
[user1@vm1 ~]$ su - root
Password: 
Last login: Wed Dec 28 10:58:01 CST 2016 from vm2 on pts/1
[root@vm1 ~]# echo "user1 ALL=(ALL) NOPASSWD:/usr/bin/rsync,/bin/tar,/usr/bin/scp,/bin/cp" >> /etc/sudoers

2.驗證是否提權成功

[root@vm1 ~]# su - user1
[user1@vm1 ~]$ sudo -l
Matching Defaults entries for user1 on this host:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
    LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
    LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User user1 may run the following commands on this host:
    (ALL) NOPASSWD: /usr/bin/rsync, (ALL) /bin/tar, (ALL) /usr/bin/scp, (ALL) /bin/cp
# 可以發現提權成功

3.客戶端先分發到服務端user1用戶家目錄

[user2@vm2 ~]$ scp -P22 -r -p /home/user2/ user1@192.168.99.241:/home/user1
.bash_logout                                                                        100%   18     0.0KB/s   00:00    
.bash_profile                                                                       100%  193     0.2KB/s   00:00    
.bashrc                                                                             100%  231     0.2KB/s   00:00    
lastnotification                                                                    100%   11     0.0KB/s   00:00    
id_rsa                                                                              100% 1679     1.6KB/s   00:00    
id_rsa.pub                                                                          100%  391     0.4KB/s   00:00    
known_hosts                                                                         100%  176     0.2KB/s   00:00

4.連接服務端后執行`sudo cp`命令執行本地拷貝

[user2@vm2 ~]$ ssh -t user1@192.168.99.241 sudo cp /home/user1/ /etc
cp: omitting directory ‘/home/user1/’
Connection to 192.168.99.241 closed.

原創文章,作者:rex,如若轉載,請注明出處:http://www.www58058.com/65115

(0)
rexrex
上一篇 2017-01-05
下一篇 2017-01-05

相關推薦

  • linux下zip包的壓縮與解壓

    linux zip 命令詳解  功能說明:壓縮文件。  語 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目錄>][-ll][-n <字尾字符串>][-t <日期時間>][-<壓縮效率>][壓縮文件][文件…][-i <范本樣式&gt…

    Linux干貨 2017-04-10
  • Linux系統進程管理

    本章學習內容     ——進程概念     ——進程創建、切換和撤銷     ——進程調度     ——進程分類     ——進程狀態 &n…

    Linux干貨 2016-09-13
  • 馬哥教育網絡班21期+第3周作業

    馬哥教育網絡班21期+第3周作業 1、列出當前系統上所有已經登陸的用戶的用戶名 [root@ip-172-31-45-110 ec2-user]# who | awk '{print $1}' ec2-user 2、取出最后登錄到當前系統的用戶的相關信息 [root@ip-172-3…

    Linux干貨 2016-07-22
  • 文本處理工具

    文本處理工具 文件內容:less和 cat,more文件截?。篽ead和tail文本內容處理:tr按列抽取:cut按關鍵字抽?。篻rep 文件查看命令:cat, tac,rev cat  復制標準輸入到當前輸出 語法:cat [OPTION]… [FILE]…選項: -E: 顯示行結束符$ -n: 對顯示出的每一行進行編號 -A:顯示所有…

    Linux干貨 2016-08-07
  • linux文本處理三劍客—grep

      cat:concatenate 文本文件查看工具 cat [option] filename… -n:給顯示出來的文本行加上編號 -b:非空行編號 -V:顯示 ^ -E:顯示行結束符$ -T:顯示制表符 -A:顯示所有控制符-A=-VET -s:壓縮連續…

    系統運維 2016-08-05
  • vsftp簡單應用

    vsftp配置詳解 前言 FTP(File Transfer Protocol)是文件傳輸協議的簡稱。它能讓用戶 連接上一個遠程計算機(運行著 FTP 服務器程序)查看遠程 計算機上有哪些文件,然后把文件從遠程計算機上下載到 本地計算機,或把本地計算機文件上傳到遠程計算機。但是ftp是一種古老的文件傳輸協議,是明文傳輸,特別的不安全所以就有了vsftp。 一…

    Linux干貨 2016-12-18
欧美性久久久久