遠端登入執行程式
透過 rsa 金鑰, nohup, 來操作多個 OpenWRT AP
當只有一個 OpenWRT AP 的時候,我們可以透過 SSH 登入,進行操作。但是,當我們有一整群 OpenWRT AP 時,在這些 AP 上執行程式,就變得一件麻煩的事情。
為了避免不斷登入的麻煩,我們需要兩個工具: 首先是要有免用密碼登入 OpenWRT 的手段,第二,則是要能夠遠端執行並終止程式。
以金鑰方式登入 OpenWRT
對於 Linux 系統而言,有兩種登入的方式。第一種是透過密碼方式,也就是傳統的登入方式。第二種則是透過金鑰方式登入,此方式由於不需要密碼,故可以用 script 的方式交換資訊。
為了要以金鑰方式登入,首先,要先擁有金鑰 (key),在 Linux 系統中,我們可以用以下指令產生金鑰對:
此指令會產生一組無密碼保護的金鑰對 (id_rsa、id_rsa.pub) 在 .ssh
的目錄底下。接著我們要把這組金鑰設定為登入的金鑰,也就是把 id_rsa.pub 設定成登入的金鑰,指令如下:
接著,安裝 openssh 的 server 和 client:
完成後,我們可以先 SSH 本機,看看設定是否正確。
當第一次登入時,會出現 ECDSA key fingerprint is ...
這樣的訊息,輸入確認,下一次再登入時就不會出現了。
接著,假設 OpenWRT 的 IP 位址為 192.168.1.1,可以透過以下指令來設定為使用金鑰登入。相同的,第一次會出現認證資訊,確認之後就可以無密碼登入。
OpenWRT 官網上有許多資源,例如這裡的設定就是參考: https://openwrt.org/docs/guide-user/security/dropbear.public-key.auth
背景執行程式以及透過指令停止程式
在 Linux 環境執行程式時,當我們關閉遠端的 SSH 視窗時,也就會停止程式的執行,這是因為關閉視窗等效於停止一個 session,而此終止 session 的動作會發一個信號 (hangup) 給所有在此 session 下執行的程式,邀邱他們停止。
為了避免這一件事情,我們可以使用 nohup (no hangup) 的指令來執行程式,此時,由於沒有中斷信號,程式就可以在背景執行。通常來說,指令可以表示如下:
最後的 &
代表背景執行,因此不會顯示任何資訊於視窗中。
在 OpenWRT 中,nohup 並不是一個內建的指令,因此,在使用前要先安裝此指令:
這部分的架構又稱為 Linux Daemon (守護進程),與 Linux的系統設計相關,可以參考:
當我們可以透過 nohup
執行程式之後,下一個問題就變成要如何結束程式。在 Linux 系統中,每一隻程式都會有一個 ID (PID),在一般的系統下,可以透過 ps
這個指令來查詢目前執行程式的 PID。但是很明顯的,此方法費工又沒效率,因此,我們修改一下 nohup
的指令,記錄下執行程式的 PID。
此指令將會把原本程式輸出的結果寫入 logfile.txt 中,並把 PID 的資訊(透過 $!
取得)寫入 pidfile.txt 中,因此,當我們想要關閉剛剛透過 nohup
執行的程式時,就只需要輸入:
透過以上兩個方法,並搭配上面無密碼登入的教學,就可以寫一隻 shell script 來開啟多台 OpenWRT AP 上的程式,並在寫另一隻 shell script 來停止這些程式。
Last updated