簡介
SSH 為 Secure Shell 的縮寫,由 IETF 的網絡小組(Network Working Group)所制定;SSH 為建立在應用層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH最初是UNIX系統上的一個程序,后來又迅速擴展到其他操作平台。SSH在正確使用時可彌補網絡中的漏洞。SSH客戶端適用於多種平台。幾乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可運行SSH。

最基本的用法
SSH主要用於遠程登錄。假定你要以用戶名user,登錄遠程主機host,只要一條簡單命令就可以了。
$ ssh user@host
如果本地用戶名與遠程用戶名一致,登錄時可以省略用戶名
$ ssh host
SSH的默認端口是22,也就是說,你的登錄請求會送進遠程主機的22端口。使用p參數,可以修改這個端口。
$ ssh -p 2222 user@host
上面這條命令表示,ssh直接連接遠程主機的2222端口。
下面開始部署ssh秘鑰的批量分發
第一步:安裝sshpass免交互工具並進行SSH-key的批量分發
下載epel源並更新yum倉庫
[root@controller ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [root@controller ~]# yum clean all -y && yum makecache
第二步:創建密鑰對文件
免交互創建密鑰對
[root@controller ~]# ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" Generating public/private dsa key pair. /root/.ssh/id_dsa already exists. Overwrite (y/n)? y Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: SHA256:Qn8BNpM9ZpcRUgV7ewxn0GTOoZvfn5CcqQz7Dt7xqlA root@controller The key's randomart image is: +---[DSA 1024]----+ | =o..=*o+o| | ..+=.o..=o| | . o.o..o =| | . . . .o* | | . SE. o. o| | ... . =..| | . o . * ..| | o * + . o| | ++B.. ..| +----[SHA256]-----+ [root@controller ~]# ls ~/.ssh/ id_dsa id_dsa.pub 命令說明: ssh-keygen:生成密鑰對命令 -t:指定密鑰對的密碼加密類型(rsa,dsa兩種) -f:指定密鑰對文件的生成路徑包含文件名 -P(大寫):指定密鑰對的密碼
第三步:免交戶方式分發公鑰
[root@controller .ssh]# sshpass -p "123" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@192.168.128.165"
命令說明:
sshpass:專為ssh連接服務的免交戶工具
-p :指定登錄的密碼
ssh-copy-id:自動分發公鑰的工具
-i:指定公鑰路徑
-o StrictHostKeyChecking=no :不進行對方主機信息的寫入(第一次ssh連接會在know_hosts文件里記錄)
交互式分發命令
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.91.135
第四步:測試
[root@controller .ssh]# ssh root@192.168.128.165 Last login: Wed Jan 10 02:32:04 2018 from controller
編寫腳本:
#!/bin/bash
User=root
passWord=123
port=2266
function YumBuild(){
echo "正在安裝epel源yum倉庫,請稍后..."
cd /etc/yum.repos.d/ &&\
[ -d bak ] || mkdir bak
[ `find ./*.* -type f | wc -l` -gt 0 ] && find ./*.* -type f | xargs -i mv {} bak/
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo &>/dev/null
yum -y clean all &>/dev/null
yum makecache &>/dev/null
}
rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null
if [ $? -gt 0 ];then
YumBuild
yum -y install sshpass &>/dev/null || (echo "sshpass build error!" && exit)
fi
[ -d ~/.ssh ] || mkdir ~/.ssh;chmod 700 ~/.ssh
echo "正在創建密鑰對...."
rm -rf ~/.ssh/id_dsa ~/.ssh/id_dsa.pub
ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" &>/dev/null
for ip in `cat /root/Pingip.txt`
do
ping $ip -c1 &>/dev/null
if [ $? -gt 0 ];then
echo "$ip無法ping通請檢查網絡"
continue
fi
sshpass -p "$passWord" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no -p2266 ${User}@$ip" &>/dev/null
echo "$ip 密鑰分發成功"
done
常見報錯,
ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

解決方法
ssh-keygen -R 服務器端的ip地址
