一、SSH命令批量操作Linux服務器
Xshell、FinalShell
手動登錄服務器,敲部署命令進行部署
多台部署得 一 一 登錄,因此若台數少可用ssh命令。若多的話,還是建議使用ansible等批量執行工具。
SSH管理
通常,第一次從本機連接遠程主機登錄時,需要輸入yes,
#vim /etc/ssh/ssh_config
StrictHostKeyChecking no(該參數取消第一次連接時的的"yes/no"驗證)
修改后,立即生效,不必重啟sshd服務。
若每次登錄都需要輸入密碼,可采用密鑰的方式批量管理服務器,實現腳本批量部署
Linux密鑰生成
公鑰: 相當於鎖
私鑰: 相當於鑰匙,防止丟失
SSH命令生成公鑰私鑰,並傳輸
①Linux使用命令生成公私鑰:
指定生成"rsa"類型的秘鑰,默認存放目錄為當前用戶的"家目錄/.ssh/"目錄下。 #ssh-keygen -t rsa
回車確認后,在下列提示信息中,有這兩行,表示公鑰,私鑰的存放位置:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
②使用工具將公鑰傳輸到指定機器上
#ssh-copy-id -i /root/.ssh/id_rsa.pub 用戶@IP
-i:指定公鑰
輸入遠程主機用戶密碼,下發公鑰
例:
[root@centos7-3 opt]# ssh-copy-id root@192.168.24.122
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/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.24.122's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.24.122'"
and check to make sure that only the key(s) you wanted were added.
SSH命令操作服務器
ssh登錄服務器 -> 執行Shell命令 -> 執行完退出
[root@centos7-3 opt]# ssh 192.168.24.122 "echo this is $HOSTNAME" this is centos7-3
#######上條命令知,命令行的變量是從centos7-3本機獲取的,而不是獲取對應的遠程主機變量########
[root@centos7-3 opt]# ssh 192.168.24.122 "cat /home/gaokai/centos7-2.txt"
centos7-2 ip 192.168.24.122
Shell批量部署示例
ssh命令連接遠程主機時,若不輸入用戶,默認為root用戶。
例
for ip in $(cat /root/sjghost);do echo $ip ssh ${ip} "echo deploying" done
Shell批量下發部署腳本、部署包等
#/root/iphost文件中記錄的是IP地址,每一行一個IP地址。
for ip in $(cat /root/iphost);do echo $ip scp -r /tmp/test.log ${ip}:/usr/local/src/ done
Shell批量拉取文件等
for ip in $(cat /root/iphost);do echo $ip scp root@${ip}:/usr/local/src/sjg.log /tmp/test.log.${ip} echo "$ip傳輸完成" done
二、ssh公鑰批量下發
#ssh-copy-id 下發公鑰 #ssh-copy-id -i /root/.ssh/id_rsa.pub 127.0.0.1
需要手動輸入密碼,服務器數量多的話,不可能光重復敲該命令,必須借用腳本。
sshpass命令可實現自動輸入密碼
#yum install sshpass -y #sshpass -p "xxx" ssh-copy-id -i /root/.ssh/id_rsa.pub 用戶@IP地址(用戶若為root,可不寫)
其中"xxx"為sshpass使用的密碼,該密碼為用戶密碼。
編寫腳本實現公鑰批量下發:
#vim /root/iphost.sh #IP、root密碼 192.168.24.122 roottoor 批量下發公鑰實現腳本/root/deployrsa.sh IFSBAK=$IFS IFS=$'\n' for line in $(cat /root/iphost);do myip=$(echo "$line" | awk '{print $1}') mypwd=$(echo "$line" | awk '{print $2}') sshpass -p "$mypwd" ssh-copy-id -i /root/.ssh/id_rsa.pub $myip done IFS=$IFSBAK
三、Jenkins運行Shell命令
Jenkins學習流程,按順序來
第一步.操作本機Shell命令。
第二步.通過ssh操作服務器。
第三步.通過ansible批量操作服務器。
使用Jenkins操作本機Shell命令
1.Dashboard欄選擇"新建視圖"

2.創建視圖(自己創建視圖名稱[testShell],並選擇Type(List View)),點擊確定。

3.Dashboard欄選擇"新建Item",即創建任務。任務名"gk_testShell",自由風格的項目(Freestyle project),選擇OK(並畫√)。

4.之后在跳出的頁面下,選擇構建,增加構建步驟,選擇執行shell命令
然后填寫要執行的shell命令。
然后點擊保存。

里面也可以放腳本執行 ,對應的iphost文件是已經存放在linux對應的目錄下。如圖:

5.然后在Dashboard欄,點擊立即構建。

6.可以通過構建歷史(Build History)選擇,查看執行是否成功,並查看執行結果。
如圖,"x"為執行失敗,"√"為執行成功:

查看執行成功的:然后選擇控制台輸出:
若選擇"文本方式查看",則會單獨列出一頁來展示輸出內容。

四、Jenkins通過shell管理服務器
工具:publish over ssh
①通過ssh部署Linux類服務器。
②可跟git或svn結合,直接拉取版本控制里的代碼進行部署。對於php、python類的部署非常有用。
開始部署SSH管理服務器:
⑴部署前需要先添加ssh服務器
Dashboard欄下"系統管理" -> 系統設置 -> 添加SSH服務器(最下面Puhlish over ssh欄"SSH Servers",新增)

點擊系統配置后,在新出的頁面拉到最下面,看到"Publish over SSH",填寫"Path to key = /root/.ssh/id_rsa",配置私鑰的路徑。

然后在下面的"SSH Servers"欄配置,該SSH Server欄,對應的是公鑰所在的服務器。

⑵Jenkins創建部署項目
配置好SSH服務器后,就可以在"我的視圖"中,選擇新建任務

新建任務"ssh_remote",選擇自由風格,然后確定。
然后跳到"ssh_remote"任務的配置頁面,選擇"構建"欄,增加構建步驟 ,選擇"Send files or execute commands over SSH"選項,然后選擇指定的SSH服務器(這里就有個缺點:SSH構建需要一台一台的構建,即若需要對100台進行操作,則需要配置100台,量多時工作繁瑣)。

點擊應用后,保存。然后"立即構建",看是否能執行成功。

執行成功。
Jenkins創建任務時,通過復制的方法
補充:在新建任務時,也可以選擇復制任務,之后再自己進行局部修改。

Publish Over Ssh部署的優點缺點
服務器數量少的,使用ssh管理方便
對於服務器數量過多時,配置繁瑣: 添加ssh服務器繁瑣,添加項目指定服務器繁瑣
另外安全注意
Jenkins由於有直接管理服務器的權限,所以Jenkins網頁一定要IP白名單、密碼復雜度要高
Jenkins的權限要正確配置

