前情介紹:
????? 最近醋粟,需要自己動(dòng)手部署項(xiàng)目到測(cè)試環(huán)境仗阅。測(cè)試環(huán)境需要用跳板機(jī)登錄昌讲。于是每天自己在不停的輸入ssh命令登錄到跳板機(jī)和遠(yuǎn)程測(cè)試機(jī)器。煩死减噪。敲了一遍又一遍的登錄命令短绸,而跳板機(jī)還是用名字的,名字卻老長(zhǎng)老長(zhǎng)筹裕,記不住醋闭。于是,每次登錄前朝卒,先找到對(duì)應(yīng)的跳板機(jī)名稱证逻,然后copy到命令里面,然后再去登錄扎运。要最終登錄到測(cè)試機(jī)器上瑟曲,需要做三步:1. 打開記錄跳板機(jī)地址名稱的文件;2.在終端輸入ssh登錄命令豪治,copy跳板機(jī)名稱粘貼到終端作為登錄命令的參數(shù). 3.在跳板機(jī)器上再輸入一遍命令登錄到目標(biāo)機(jī)器上洞拨。花去的時(shí)間不說负拟,問題是自己老在做這個(gè)重復(fù)沒有技術(shù)含量的動(dòng)作烦衣。很顯然,我要自動(dòng)化掩浙。腳本花吟,不就是干這個(gè)事情嗎?OK厨姚,我決定寫一個(gè)登錄到目標(biāo)機(jī)器的腳本衅澈。
腳本第一稿:
?????? 登錄的命令其實(shí)很簡(jiǎn)單,不就是“ssh -i ${cert-file} ${target_machine}” 嗎谬墙?敲兩個(gè)命令就好今布,但于我前面介紹的的原因,這兩個(gè)命令敲的快不了拭抬。因此部默,一開始的想法就是把這兩條命令放在sh腳本中執(zhí)行即可。于是造虎,第一稿出爐傅蹂,格式如下:
#!/bin/sh
TARGET_MACHINE=$1
board_machine=$2
local-cert-file=$3
board-cert-file=$4
echo "you input target machine:" $TARGET_MACHINE
echo "you input machine profile:" $local-cert-file
sudo ssh -i ${local-cert-file} ${board_machine} "ssh -i ${board-cert-file} $TARGET_MACHINE"
執(zhí)行,發(fā)現(xiàn)出來錯(cuò)誤:
Pseudo-terminal will not be allocated because stdin is not a terminal
發(fā)現(xiàn)這事偽終端問題。于是份蝴,添加選項(xiàng)-tt解決犁功。最后一句話成這樣:
sudo ssh -i ${local-cert-file} ${board_machine} "ssh -i? -tt ${board-cert-file} $TARGET_MACHINE"
然后chmod +x login.sh,再執(zhí)行./login.sh 10.0.1.9 xxxxxx#@longboardmachinename ./local-certfile /home/board-certfiledir/board-certiflename婚夫。 ok波桩,順利登錄到目標(biāo)機(jī)器10.0.1.9了。雖然正常工作了请敦,可是這4個(gè)參數(shù)要敲這么長(zhǎng)镐躲,根本沒有改進(jìn)啊,還是會(huì)煩死侍筛。萤皂。。不行匣椰,還得改進(jìn)裆熙;
腳本第二稿:
因?yàn)樘鍣C(jī)的名稱是不變的,因此完全可以寫死在腳本里面啊禽笑。而且因?yàn)楸镜睾吞鍣C(jī)的certfile名稱完全一致入录,都是形如xxx_cert.pem的格式,xxx是對(duì)應(yīng)的測(cè)試環(huán)境標(biāo)記佳镜,因此改寫如下:
#!/bin/sh
TARGET_MACHINE=$1
PROFILE=$2
echo "you input target machine:" $TARGET_MACHINE
echo "you input machine profile:" $PROFILE
echo "Begin to login target machine......"
board-certfile="/home/certfiledir/${PROFILE}_cert.pem"
echo "pem:" ${board-certfile}
sudo ssh -i ${PROFILE}_cert.pem #longboardmachinename# "ssh -tt -i ${board-certfile} $TARGET_MACHINE"
此時(shí)僚稿,就只要輸入2個(gè)參數(shù)了,鍵入: ./login.sh 10.0.1.9 test,這樣就用到測(cè)試的認(rèn)證文件登錄到目標(biāo)機(jī)器上了蟀伸。只需要記錄下要登錄的目標(biāo)機(jī)器和認(rèn)證文件的標(biāo)記即可蚀同。此時(shí),我突然只想登錄到跳板機(jī)上啊掏,這個(gè)又不適用了蠢络。。迟蜜。于是刹孔,再改。
腳本第三稿:
添加選項(xiàng)娜睛,采用if分支髓霞。如果只想登錄到跳板機(jī),就把第一個(gè)target-machine的名稱寫成“board”微姊,發(fā)現(xiàn)是“board”酸茴,則只登錄到跳板機(jī)就行分预。添加if后的寫法如下:
#!/bin/sh
TARGET_MACHINE=$1
PROFILE=$2
echo "you input target machine:" $TARGET_MACHINE
echo "you input machine profile:" $PROFILE
if [ $TARGET_MACHINE = "board" ];then
??? echo "Begin to login board machine......"
??? sudo ssh -i ${PROFILE}_cert.pem #longboardmachinename#
elif [ $TARGET_MACHINE ];then
??? echo "Begin to login target machine......"
??? board-certfile="/home/certfiledir/${PROFILE}_cert.pem"
??? echo "pem:" ${board-certfile}
??? sudo ssh -i ${PROFILE}_cert.pem?#longboardmachinename# "ssh -tt -i ${board-certfile} $TARGET_MACHINE"
else
??? echo "Usage: login.sh [target_machine] [profile(test|release|]."
??? echo "???? [target_machine]: the ip of the machine or 'board' if you only want to login the board machine"
fi
此時(shí)兢交,就支持只登錄到跳板機(jī)的任務(wù)了。只需輸入:./login.sh board test即可笼痹。
最終配喳,這個(gè)腳本執(zhí)行時(shí)酪穿,只要輸入你要登錄的目標(biāo)機(jī)器和認(rèn)證文件標(biāo)記即可。只要一步晴裹,時(shí)間1s 搞定被济。