您好,登錄后才能下訂單哦!
SSH是Secure Shell Protocol的簡寫,由IETF網絡工作小組制定;在進行數據傳輸之前,SSH先對聯機數據包通過加密技術進行加密處理,加密后再進行數據傳輸,確保了傳遞的數據安全。
SSH是專為遠程登錄會話和其他網絡服務提供的安全性協議。利用SSH協議可以有效的防止遠程管理過程中的信息泄露問題,在當前的生產環境當中,絕大多數企業普遍采用SSH協議服務來代替傳統的不安全的遠程聯機服務軟件。如telnet等。
SSH服務結構:
SSH服務是由服務端軟件OpenSSH和客戶端(常見的有SSH,SecureCRT,Xshell,Putty)組成,SSH服務默認使用22端口提供服務,它有兩個不兼容的SSH協議版本,分別是1.x和2.x。
從SSH客戶端來看,SSH服務主要有兩種級別安全驗證,具體級別如下:
1.基于口令的安全認證
2.基于密鑰對的安全認證:基于密鑰的安全認證也有windows客戶端和linux客戶端的區別。
修改sshd.conf
Port52113 #為了提高安全級別,建議改掉SSH服務默認連接端口 PermitRootLoginno #root超級用戶***都知道,建議禁止它(root)遠程登陸 PermitEmptyPasswordsno #禁止空密碼登錄 UseDNSno #不使用DNS GSSAPIAuthentication no #加快SSH連接速度
批量分發數據或者文件
(1)添加系統賬號,并修改密碼
[root@A~]#useradd fenfa [root@A~]#id fenfa uid=503(fenfa) gid=503(fenfa) groups=503(fenfa) [root@A~]#echo 123456|passwd --stdin fenfa
注意:所有被管理主機都要創建該用戶
(2)創建密鑰對
[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,分發給需要管理的主機
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 #出現這個表示推送公鑰成功 to make sure we haven't added extra keysthat you weren't expecting.
注意:ssh-copy-id的特殊應用
如果SSH修改成了特殊端口,如52113,那么,用上面的ssh-copy-id命令就無法進行分發公鑰匙了。如果仍要使用ssh-copy-id的話,那么可能的解決方法有兩個:
1.命令為: ssh-copy-id -i .ssh/id_dsa.pub "-p 52113 fenfa@192.168.0.111"#特殊端口分發,要適當加引號
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.111的fenfa用戶家目錄下面的.ssh目錄(提前創建,權限為700)下,并做了更改名字的操作,名字改為authorized_keys,權限變為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)批量分發測試
[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
批量分發腳本:
①建立被管理主機地址庫
②創建批量分發腳本
實例:將分發主機(192.168.1.114)家目錄的text.txt文件分發到被管理主機(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)批量分發初始都需要輸入一次密碼,并且第一次連接要確認
(6)sudo對分發用戶fenfa提權
root用戶,visudo命令修改
在文件結尾加入一下內容:
fenfa ALL=(ALL) NOPASSWD:/bin/cp
說明:
fenfa | ALL | (ALL) | NOPASSWD | /bin/cp |
使用sudo的用戶 | 允許使用sudo的主機 | 使用sudo免密碼 | 使用sudo可以執行的命令,如果是允許所有命令填NOPASSWD:ALL |
root用戶,vim /etc/sudoers直接修改sudoers文件,同理添加同上面的內容
1)安裝expect執行環境
2)expect批量分發,免交互腳本示例
主要有兩部分:fenfa_sshkey.exp和fenfa.sh ,使用時直接執行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" ##分發帳號的密碼 set user "fenfa" ##分發帳號 set port "52113" ##分發主機的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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。