最近要設計很多 Linux 系統的自動化工作,都需要登入主機才可以執行,SSH 預設是需要驗證帳號密碼才能使用。為了自動化與方便,因此想寫個自動登入遠端主機執行命令的程式,最簡單也可以透過 expect Shell 的方式來達成,但是 expect 腳本語言與密碼的保護方式實在太 low,還是透過比較正統的 SSH 登入方式比較恰當。
我們都知道 SSH 在連線的時候會進行 SSL 加密,其實也提供了透過金鑰的方式驗證身份,只要將產生 Public Key 放到 Server 上就可以不輸入密碼直接連線囉,先來介紹一下使用的方法。
產生 SSH 登入金鑰
先切換到自己的家目錄
cd ~
產生一組金鑰,畫面如下:
ssh-keygen -t dsa
產生的 Key 會在家目錄中的 .ssh 資料夾中 (id_dsa, id_dsa.pub),其中的 id_dsa.pub 就是我們要放到遠端 Server 的 Key,如下:
接著我們將 id_dsa.pub 傳到我們想要自動登入的站台,如下:
scp id_dsa.pub sj@your-server.com:~
然後先 ssh 到這個站台,透過以下命令建立 authorized_keys 檔案
ssh sj@your-server.com
cd ~
cat id_dsa.pub >> .ssh/authorized_keys
登出後重新登入,就可以跳過驗證程序囉,如下圖: