大量設定SSH互信指令碼,ssh互信指令碼

來源:互聯網
上載者:User

大量設定SSH互信指令碼,ssh互信指令碼

在大規模自動化部署時我們常常需要配置好伺服器的SSH互信,以便自動化指令碼可以免密登入遠程伺服器,常規的手動設定SSH互信步驟如下:

  • 使用ssh-keygen產生本地ssh key(mha01),產生的檔案如下:

    

  • cp .ssh/id_rsa.pub .ssh/authorized_keys
  • 將.ssh內容全部拷貝至遠程伺服器mha02,在正式拷貝之前會把遠程伺服器加到.ssh/known_hosts檔案中然後再拷貝。
每次向新伺服器拷貝都會更新.ssh/known_hosts,全部拷貝完畢後在mha1上就可以免密登入所有伺服器了。  根據以上思想編寫的大量設定指令碼為:
#!/usr/bin/expect#此指令碼需配合ip.list檔案使用,ip.list檔案儲存體所有伺服器IP,包含本機伺服器。#此指令碼需要和ip.list一起放置在使用者~/目錄下才能執行。set passwd xxx --設定伺服器密碼變數,需要所有伺服器上要配置ssh互信的使用者的密碼全部一致。spawn ssh-keygen  expect {"id_rsa" {send "\r";exp_continue}  "Overwrite" {send "y\r";exp_continue}    "phrase" {send "\r";exp_continue}    "again" {send "\r";exp_continue}  }#需要注意的是路徑不能以~開頭,因此要麼寫成絕對路徑要麼寫成相對路徑,絕對不能用~/來表示家目錄。但是如果是$ip:~/卻可以,奇坑無比。spawn cp .ssh/id_rsa.pub .ssh/authorized_keys --這可也可以寫成spawn cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keysset hosts [open ip.list r]while { [gets $hosts ip]>=0} {spawn scp -r .ssh/ $ip:~/  --這裡也可以寫成spawn scp -r /root/.ssh/ $ip:/root/ expect {"yes/no" {send "yes\r";exp_continue}          "password:" {send "$passwd\r";exp_continue}         }  }  close $hosts
假設有mha01-mha99 99台伺服器,那麼配置完畢後mha01可以免密登入其他98台伺服器,但是mha02隻能免密登入mha01和mha02,mha03隻能免密登入前3台伺服器,以此類推mha99和mha01一樣可以免密登陸全部伺服器,如果想要01-99之間的伺服器也能像01和99一樣,可以把指令碼的第二部分再次執行一遍,這樣相當於把包含全部hosts的known_hosts檔案的.ssh目錄傳輸到所有伺服器節點。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.