環境介紹
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