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 01:41
下一篇 2017-01-05 11:16

相關推薦

  • 文件管理類命令詳解

    文件管理類命令詳解 文件查看 cat 功能描述:連接文件并打印到標準輸出上 命令格式:cat [OPTION]… [FILE]… OPTION: -b 對所有非空白行編號 -n 給所有輸出行編號 -s 將連續多行空白行顯示為一行空白行 -E 在每一行行尾顯示$ FILE:可顯示多個文件,文件之間以空格分隔 舉例 將file1、file…

    Linux干貨 2017-07-09
  • 基于iptables mangle的lvs && lvs的持久連接

    一、lvs-dr類型:也稱direct routing,簡稱為g(gatewaying);配置lvs-dr基于iptables mangle的實現方式  實驗圖:  地址規劃:    VIP: 172.16.2.100    DIP: 172.16.2.13    RIP1:17…

    Linux干貨 2015-06-30
  • iptables之nat

    NAT網絡地址轉換SNAT:修改IP報文中的源IP地址 本地向互聯網請求讓本地網絡中的主機可使用統一地址與外部通信,從而實現地址偽裝請求:修改源IP,如果修改則由光梨園定義響應:修改目標IP,由nat自動根據會話表中追蹤機制實現相應修改DNAT:修改目標地址轉換 外網服務器向其他客戶端請求請求:由外網主機發起,修改其目標地址,由管理員定義相應:修改源地址,但…

    2017-11-12
  • N22-第三周博客作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 sort -u 在輸出結果中去除重復行 2、取出最后登錄到當前系統的用戶的相關信息。 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 uniq -c 在輸出行前面加上每行在輸入文件中出現的次數。 sort -rn : -n  …

    Linux干貨 2016-08-29
  • 8.2日作業

    8.2作業 1、在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾。   先將文件目錄的屬組變更為g1 ,chmod  g+s /data/testdir/    …

    Linux干貨 2016-08-08
  • DNS原理詳解

    1、DNS概述   domain name service  區域名稱服務或者domain named system 區域名稱系統,是互聯網最基礎的服務,分為正向域名解析(將域名解析為IP地址)和反向域名解析(將IP地址解析為域名)兩部分。 2、bind   bind(Berkeley Internet Name Domain)…

    Linux干貨 2016-08-26
欧美性久久久久