溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SSH批量分發(fā)與管理

發(fā)布時間:2020-06-24 11:45:52 來源:網(wǎng)絡 閱讀:519 作者:BigManer 欄目:系統(tǒng)運維

一、SSH服務介紹

  SSHSecure Shell Protocol的簡寫,由IETF網(wǎng)絡工作小組制定;在進行數(shù)據(jù)傳輸之前,SSH先對聯(lián)機數(shù)據(jù)包通過加密技術進行加密處理,加密后再進行數(shù)據(jù)傳輸,確保了傳遞的數(shù)據(jù)安全。

  SSH是專為遠程登錄會話和其他網(wǎng)絡服務提供的安全性協(xié)議。利用SSH協(xié)議可以有效的防止遠程管理過程中的信息泄露問題,在當前的生產環(huán)境當中,絕大多數(shù)企業(yè)普遍采用SSH協(xié)議服務來代替?zhèn)鹘y(tǒng)的不安全的遠程聯(lián)機服務軟件。如telnet等。

SSH服務結構:

  SSH服務是由服務端軟件OpenSSH和客戶端(常見的有SSH,SecureCRT,Xshell,Putty)組成,SSH服務默認使用22端口提供服務,它有兩個不兼容的SSH協(xié)議版本,分別是1.x2.x。

二、SSH服務認證類型

SSH客戶端來看,SSH服務主要有兩種級別安全驗證,具體級別如下:

1.基于口令的安全認證

2.基于密鑰對的安全認證:基于密鑰的安全認證也有windows客戶端和linux客戶端的區(qū)別。

三、SSH服務優(yōu)化

修改sshd.conf

Port52113         #為了提高安全級別,建議改掉SSH服務默認連接端口
PermitRootLoginno  #root超級用戶***都知道,建議禁止它(root)遠程登陸
PermitEmptyPasswordsno   #禁止空密碼登錄
UseDNSno               #不使用DNS
GSSAPIAuthentication no   #加快SSH連接速度


四、SSH批量分發(fā)管理實戰(zhàn)

批量分發(fā)數(shù)據(jù)或者文件

1)添加系統(tǒng)賬號,并修改密碼

[root@A~]#useradd fenfa
[root@A~]#id fenfa
uid=503(fenfa) gid=503(fenfa) groups=503(fenfa)
[root@A~]#echo 123456|passwd --stdin fenfa


注意:所有被管理主機都要創(chuàng)建該用戶

2)創(chuàng)建密鑰對

[fenfa@A ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key(/home/fenfa/.ssh/id_dsa):
Created directory '/home/fenfa/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:   #此處回車
Your identification has been saved in/home/fenfa/.ssh/id_dsa.
Your public key has been saved in/home/fenfa/.ssh/id_dsa.pub.
The key fingerprint is:        #此處回車
0e:99:ef:7f:2d:5c:36:88:79:09:7a:89:e0:d1:f7:fcfenfa@A
The key's randomart p_w_picpath is:  #此處回車
+--[ DSA 1024]----+
|               |
|               |
|      .       |
|     oo. o    |
|    .+oS+ B o  |
|     .+o = * +  |
|       o. o = . |
|      .    + E |
|       .... .   |
+-----------------+


默認會在fenfa用戶的家目錄/home/fenfa/.ssh下生成兩個文件:

id_dsa.pub   #公鑰,權限644,分發(fā)給需要管理的主機

id_dsa      #私鑰,權限600,保留在本地

3)推送公鑰到管理主機

實例為推送到192.168.0.111主機,192.168.0.112同樣的方法推送

[fenfa@A~]$ ssh-copy-id -i.ssh/id_dsa.pub "-p 22 <a href="mailto:fenfa@192.168.0.111\" "="">fenfa@192.168.0.111"
The authenticity of host '192.168.0.111(192.168.0.111)' can't be established.
RSA key fingerprint is85:83:52:21:20:dd:4a:7c:3c:df:ec:5a:de:a0:b4:82.
Are you sure you want to continueconnecting (yes/no)? yes
Warning: Permanently added '192.168.0.111'(RSA) to the list of known hosts.
fenfa@192.168.0.111's password:
Now try logging into the machine, with"ssh '-p 22 fenfa@192.168.0.111'", and check in:
 .ssh/authorized_keys                    #出現(xiàn)這個表示推送公鑰成功
to make sure we haven't added extra keysthat you weren't expecting.

注意:ssh-copy-id的特殊應用

如果SSH修改成了特殊端口,如52113,那么,用上面的ssh-copy-id命令就無法進行分發(fā)公鑰匙了。如果仍要使用ssh-copy-id的話,那么可能的解決方法有兩個:

    1.命令為: ssh-copy-id -i .ssh/id_dsa.pub "-p 52113 fenfa@192.168.0.111"#特殊端口分發(fā),要適當加引號

    2.編輯vi /usr/bin/ssh-copy-id 在第41行做如下修改,見加粗部分

     41 { eval "$GET_ID" ; } | ssh -p22 $1 "umask 077; test -d ~/.ssh ||

         mkdir ~/.ssh ; cat >>~/.ssh/authorized_keys && (test -x /sbin/

        restorecon && /sbin/restorecon~/.ssh ~/.ssh/authorized_keys >/d

        ev/null 2>&1 || true)" ||exit 1  #41行中的開頭ssh后面和$1前面加入自定義的ssh端口

說明:ssh-copy-id的原理(ssh-copy-id -i .ssh/id_dsa.pub "-p52113 fenfa@192.168.0.111"

就是把.ssh/id_dsa.pub復制到192.168.0.111fenfa用戶家目錄下面的.ssh目錄(提前創(chuàng)建,權限為700)下,并做了更改名字的操作,名字改為authorized_keys,權限變?yōu)?/span>600.

 

(4)檢查被管理主機上的公鑰

 [fenfa@B ~]$ ll .ssh/
total 4
-rw------- 1 fenfa fenfa 598 Jul 25 22:59authorized_keys
 [fenfa@C ~]$ ll .ssh/
total 4
-rw------- 1 fenfa fenfa 598 Jul 25 22:47authorized_keys

(5)批量分發(fā)測試

[fenfa@A ~]$ whoami
fenfa
[fenfa@A ~]$ echo 123 >a.txt
[fenfa@A ~]$ ll
total 4
-rw-rw-r-- 1 fenfa fenfa 4 Jul 26 00:00a.txt
[fenfa@A ~]$ cat a.txt
123
[fenfa@A ~]$ scp -P22 a.txt fenfa@192.168.0.111:~
a.txt                                 100%   4     0.0KB/s   00:00   
[fenfa@A ~]$ scp -P22 a.txt fenfa@192.168.0.112:~
a.txt                                 100%    4    0.0KB/s   00:00

批量分發(fā)腳本:

建立被管理主機地址庫

創(chuàng)建批量分發(fā)腳本

實例:將分發(fā)主機(192.168.1.114)家目錄的text.txt文件分發(fā)到被管理主機(192.168.1.113,192.168.1.115

[fenfa@server_04 ~]$ cat ip.txt 
192.168.1.113
192.168.1.115
[fenfa@server_04 ~]$ cat plfenfa.sh 
#!/bin/bash
. /etc/profile
. /etc/init.d/functions
File_name=test.txt
File_dir=/home/fenfa
Fenfa_user=fenfa
for ip in `cat /home/fenfa/ip.txt`
  do 
    rsync -avz -e "ssh -p52113" ${File_dir}/$File_name ${Fenfa_user}@$ip:~
    action "${Fenfa_user}@$ip ${File_dir}/$File_name copy" /bin/true
done
[fenfa@server_04 ~]$ 
[fenfa@server_04 ~]$ sh plfenfa.sh 
sending incremental file list
test.txt
 
sent 91 bytes  received 37 bytes  256.00 bytes/sec
total size is 9  speedup is 0.07
fenfa@192.168.1.113 /home/fenfa/test.txt copy                    [  OK  ]
sending incremental file list
test.txt
 
sent 91 bytes  received 31 bytes  244.00 bytes/sec
total size is 9  speedup is 0.07
fenfa@192.168.1.115 /home/fenfa/test.txt copy                    [  OK  ]

小結:

1)免密碼登陸驗證是單向的(管理主機--->被管理主機)

2)基于用戶的,最好不要跨不同的用戶

3)批量分發(fā)初始都需要輸入一次密碼,并且第一次連接要確認

6sudo對分發(fā)用戶fenfa提權

 root用戶,visudo命令修改

在文件結尾加入一下內容:

fenfa  ALL=(ALL)       NOPASSWD:/bin/cp

說明: 

fenfa

ALL

(ALL)

NOPASSWD

/bin/cp

使用sudo的用戶

允許使用sudo的主機


使用sudo免密碼

使用sudo可以執(zhí)行的命令,如果是允許所有命令填NOPASSWD:ALL

 SSH批量分發(fā)與管理

 root用戶,vim /etc/sudoers直接修改sudoers文件,同理添加同上面的內容

五、利用expect腳本實現(xiàn)免交互ssh密鑰分發(fā)

1)安裝expect執(zhí)行環(huán)境

2expect批量分發(fā),免交互腳本示例

主要有兩部分:fenfa_sshkey.expfenfa.sh ,使用時直接執(zhí)行fenfa.sh即可

[root@server_05 scripts]# cat 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"           ##分發(fā)帳號的密碼
set user "fenfa"                  ##分發(fā)帳號
set port "52113"                ##分發(fā)主機的ssh端口
spawn ssh-copy-id -i  $file  "-p  $port  $user@$host"
expect {
        "yes/no"    {send "yes\r";exp_continue}
        "*password" {send "$password\r"}
}
expect eof

 

[root@server_05 scripts]# cat fenfa.sh 
#!/bin/bash
Ipaddr_head=192.168.1
User=fenfa
Port=52113
Commond_dir=/usr/bin
if [ $UID -ne 0 ]
  then 
   echo "Error:Please use root account to exec this script!"
 else
   for n in `seq 5`
      do
      ${Commond_dir}/ssh-copy-id -i "-p $Port ${User}@${Ipaddr_head}.$n" &2>/dev/null
      if [ $? -eq 0  ] 
        then
           action "${Ipaddr_head}$n copy ssh_key..."  /bin/ture
        else
            action "${Ipaddr_head}$n copy ssh_key..."  /bin/false
      fi
   done
fi


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI