Linux系統(tǒng)root用戶無密碼訪問腳本(ssh)

半年前寫的腳本蜈彼,等有時(shí)間就加注釋(滑稽)

前言

腳本無非就是寫給電腦的記事本认烁,記事本上告訴電腦你要干什么(買二斤白菜,一斤豬肉纯蛾,倆饅頭·······)纤房,所以在寫腳本前要清楚自己要做什么,才能給計(jì)算機(jī)描述清楚翻诉,前端后端皆是如此炮姨。

手動實(shí)現(xiàn)無密碼訪問

先手動的方式來實(shí)現(xiàn)無密碼訪問,再去研究如何寫腳本碰煌。

SSH驗(yàn)證:從客戶端來看舒岸,SSH提供兩種級別的安全驗(yàn)證。

第一種級別(基于口令的安全驗(yàn)證)

只要你知道自己帳號和口令芦圾,就可以登錄到遠(yuǎn)程主機(jī)蛾派。所有傳輸?shù)臄?shù)據(jù)都會被加密,但是不能保證你正在連接的服務(wù)器就是你想連接的服務(wù)器个少『檎В可能會有別的服務(wù)器在冒充真正的服務(wù)器,也就是受到“中間人”這種方式的攻擊稍算。

第二種級別(基于密匙的安全驗(yàn)證)

需要依靠密匙典尾,也就是你必須為自己創(chuàng)建一對密匙,并把公用密匙放在需要訪問的服務(wù)器上糊探。如果你要連接到SSH服務(wù)器上钾埂,客戶端軟件就會向服務(wù)器發(fā)出請求河闰,請求用你的密匙進(jìn)行安全驗(yàn)證。服務(wù)器收到請求之后褥紫,先在該服務(wù)器上你的主目錄下尋找你的公用密匙姜性,然后把它和你發(fā)送過來的公用密匙進(jìn)行比較。如果兩個(gè)密匙一致髓考,服務(wù)器就用公用密匙加密“質(zhì)詢”(challenge)并把它發(fā)送給客戶端軟件部念。客戶端軟件收到“質(zhì)詢”之后就可以用你的私人密匙解密再把它發(fā)送給服務(wù)器氨菇。

用這種方式儡炼,你必須知道自己密匙的口令。但是查蓉,與第一種級別相比乌询,第二種級別不需要在網(wǎng)絡(luò)上傳送口令。

說白了一種場景是:

  • 服務(wù)器A: 密碼是什么
  • 服務(wù)器B:******

一種場景是:

  • 服務(wù)器A:天王蓋地虎
  • 服務(wù)器B:寶塔鎮(zhèn)河妖

而我們要做的就是第二種校驗(yàn)豌研。
實(shí)現(xiàn)步驟
(因?yàn)橐鰎oot無密碼訪問妹田,所以所有執(zhí)行全在root下,普通用戶原理是一樣的鹃共,不過是認(rèn)證文件位置不同罷了鬼佣,sudo su -sudo su的區(qū)別大家都知道的吧。

  • 首先執(zhí)行ssh-keygen -t rsa生成密鑰對
  • 將密鑰拷貝至需要無密碼訪問的機(jī)器scp id_rsa.pub(key訪問加-i)
  • 去無密碼訪問的機(jī)器將拷貝來的密鑰寫入授權(quán)列表cat id_rsa.pub >> /root/.ssh/authorized_keys
  • 文件授權(quán)chmod 600 authorized_keys 至于為什么是這個(gè)權(quán)限忘記了
  • 上述步驟中拷貝key的地方可替換為ssh-copy-id -i /root/.ssh/id_rsa.pub

上腳本文件

腳本需要服務(wù)器安裝expect命令霜浴,atp-get或yum install就行晶衷,需要bash來執(zhí)行入口文件

  • 入口文件startAuthorize.sh
#!/bin/bash
path=$(cd "$(dirname "$0")"; pwd)
sshPath="/root/.ssh/authorized_keys"
if [ ! -f "$sshPath" ]; then
echo "密鑰不存在,正在生成密鑰"
expect productKey.exp
cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
echo "密鑰生成完成坷随,正在修改服務(wù)器配置"
else
echo "密鑰已經(jīng)存在房铭,正在修改服務(wù)器配置"
fi

for i in `awk '{print $1}' ${path}/pwdconfig`
do
u=`awk -v I="$i" '{if(I==$1)print $2}' ${path}/pwdconfig`
p=`awk -v I="$i" '{if(I==$1)print $3}' ${path}/pwdconfig`
rp=`awk -v I="$i" '{if(I==$1)print $4}' ${path}/pwdconfig`
echo "開始修改ip為 $i 的服務(wù)器配置"
expect ${path}/initServer.exp $i $p $u $rp >/dev/null 2>&1
if [ "$?" = 0 ]; then
echo "正在為ip為 $i 的服務(wù)器授權(quán)"
expect ${path}/authorize.exp $i $rp >/dev/null 2>&1
if [ "$?" = 0 ]; then
echo "服務(wù)器 $i 授權(quán)成功"
fi
else
echo "\033[31m無法為ip為 $i 的服務(wù)器進(jìn)行授權(quán) 請重新修改服務(wù)器配置 \033[0m"
fi
done
echo "所有服務(wù)器配置修改完成"
sh ${path}/confirmServer.sh
  • 生成密鑰productKey.exp
#!/bin/expect
set timeout 30
spawn -noecho ssh-keygen -t rsa
expect {
    "Enter file in which to save the key" {
        send "\r"
        expect {
                        "Overwrite" {
                                send "y\r"; exp_continue;
                         }
                "Enter passphrase" {
                    send "\r"
                    expect "Enter same passphrase again:"
                    send "\r"
                }
        }
    }
}
expect eof
  • 初始化服務(wù)器(啟用root用戶腳本)initServer.exp
#!/bin/expect
set serverIp [lindex $argv 0]
set passwd [lindex $argv 1]
set user [lindex $argv 2]
set rootPasswd [lindex $argv 3]
set timeout 30
spawn -noecho ssh -l $user $serverIp
expect {
    "yes/no" { send "yes\r"; exp_continue}
    "password:" {
        send "$passwd\r"
            expect "$user"
            send "sudo su -\r"
            expect "password"
            send "$passwd\r"
            expect "root"
            send "sed -i 's/PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config\r"
            expect "root"
            send "service ssh restart\r"
            expect "root"
            send "passwd\r"
            expect "UNIX"
            send "$rootPasswd\r"
            expect "UNIX"
            send "$rootPasswd\r"
            expect "root"
            send "exit\r"
            expect "$user"
            send "exit\r"
        send_user "服務(wù)器 $serverIp 配置修改成功"; exit 0
     }
    timeout { puts "服務(wù)器 $serverIp 連接超時(shí)"; exit 1 }
}
exit 1
  • 開始授權(quán)authorize.exp
#!/bin/expect
set timeout 30
set serverIp [lindex $argv 0]
set passwd [lindex $argv 1]
spawn -noecho ssh-copy-id -i /root/.ssh/id_rsa.pub root@$serverIp
expect {
            "Are you sure you want to continue connecting (yes/no)?" {
                send "yes\r"; exp_continue;
            }
            "password:" {
                send "$passwd\r"; exp_continue;
            }
        eof { exit 0 }
}
expect eof
  • 確認(rèn)授權(quán)狀態(tài)confirmServer.sh
#!/bin/bash
path=$(cd "$(dirname "$0")"; pwd)
echo "正在檢測所有服務(wù)器連接訪問狀態(tài)"
for i in `awk '{print $1}' ${path}/pwdconfig`
do
echo "開始檢測服務(wù)器${i}的連接狀態(tài)。温眉。缸匪。"
ssh -o NumberOfPasswordPrompts=0 $i "date" > /dev/null 2>&1
if [ $? = 0 ]; then
        echo "服務(wù)器${i}無密碼訪問 [\033[32m  成功  \033[0m]"
else
        echo "服務(wù)器${i}無密碼訪問 [\033[31m  失敗  \033[0m]"
fi
done
  • 配置文件 (ip,用戶名,密碼类溢,期望修改的root密碼) pwdconfig
192.168.20.109 cloud rd123456 123456
192.168.20.214 cloud rd123456 123456
192.168.20.104 cloud rd123456 123456
192.168.20.100 cloud rd123456 123456
192.168.20.212 cloud rd123456 123456

針對于我們公司部署情況寫的(ubuntu14)凌蔬,如有需求,可適配更改闯冷,原理都是一樣的砂心。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蛇耀,隨后出現(xiàn)的幾起案子辩诞,更是在濱河造成了極大的恐慌,老刑警劉巖纺涤,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件译暂,死亡現(xiàn)場離奇詭異抠忘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)外永,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門崎脉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伯顶,你說我怎么就攤上這事囚灼。” “怎么了祭衩?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵灶体,是天一觀的道長。 經(jīng)常有香客問我汪厨,道長赃春,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任劫乱,我火速辦了婚禮,結(jié)果婚禮上锥涕,老公的妹妹穿的比我還像新娘衷戈。我一直安慰自己,他們只是感情好层坠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布殖妇。 她就那樣靜靜地躺著,像睡著了一般破花。 火紅的嫁衣襯著肌膚如雪谦趣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天座每,我揣著相機(jī)與錄音前鹅,去河邊找鬼。 笑死峭梳,一個(gè)胖子當(dāng)著我的面吹牛舰绘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葱椭,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捂寿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了孵运?” 一聲冷哼從身側(cè)響起秦陋,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎治笨,沒想到半個(gè)月后驳概,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粪小,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年抡句,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了探膊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡待榔,死狀恐怖逞壁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锐锣,我是刑警寧澤腌闯,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站雕憔,受9級特大地震影響姿骏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斤彼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一分瘦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧琉苇,春花似錦嘲玫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至穷蛹,卻和暖如春土陪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肴熏。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工鬼雀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扮超。 一個(gè)月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓取刃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親出刷。 傳聞我的和親對象是個(gè)殘疾皇子璧疗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)馁龟,斷路器崩侠,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • SSH 為 Secure Shell 的縮寫,由 IETF 的網(wǎng)絡(luò)小組(Network Working Group...
    shuff1e閱讀 1,770評論 1 11
  • SSH全稱Secure SHell坷檩,顧名思義就是非常安全的shell的意思却音,SSH協(xié)議是IETF(Internet...
    StarShift閱讀 2,527評論 0 7
  • 姓名:樂仁華 學(xué)號:16140220023 轉(zhuǎn)載自:http://m.blog.chinaunix.net/uid...
    小樂雜貨鋪閱讀 1,313評論 0 0
  • 1 今天早晨參加了本周的檢視改抡,感覺自己,通過分析能夠看到自己的不足系瓢,得到了小伙伴們的贊揚(yáng)阿纤! 2 今天中午做了家鄉(xiāng)...
    LiHongxi閱讀 133評論 0 0