其實也只是利用ssh指令再加上關閉指令就可以了,
但是會遇到輸入密碼的問題,
目前我想到的做法是利用ssh-keygen產生金鑰達成免輸入密碼即可登入的效果,
測試環境(利用VirtualBox來建立虛擬機)
HostA: Ubuntu 11.04
HostB: CentOS 5.6
HostC: FreeBSD 8.1
要測試是否能由HostA遠端去關閉HostB、HostC這兩台機器,
以下為方便測試皆使用root身份。
1.先在HostA上以ssh-keygen產生金鑰
[ccW_bash theme=”blackboard”]ssh-keygen -t rsa[/ccW_bash]
這會產生一組公、私鑰,
將id.rsa.pub這公鑰傳到HostB、HostC這兩台機器上,
以HostB為例:
[ccW_bash theme=”blackboard”]scp /root/.ssh/id.rsa.pub root@192.168.0.109:/root/ [/ccW_bash]
再登入到HostB上將id.rsa.pub移到/root/.ssh目錄並更名為authorized_keys,
若遠端機器已存在authorized_keys這個檔案就直將把id.rsa.pub的內容加入:
[cceW_bash theme=”blackboard”]cat id.rsa.pub >> /root/.ssh/authorized_keys[/cceW_bash]
若不存在就直接更名移過去即可:
[ccW_bash theme=”blackboard”]mv id.rsa.pub /root/.ssh/authorized_keys[/ccW_bash]
HostC也是相同的做法,
最後在HostA上寫一個script,內容如下:
[ccW_bash theme=”blackboard”]#!/bin/bash
# for CentOS
ssh root@192.168.0.109 ‘shutdown -h now’
# for FreeBSD
ssh root@192.168.0.120 ‘halt -p'[/ccW_bash]
注意根據OS的不同關機指令也會有所差異。
但這會有一個問題是若該遠端主機之前沒登入過會出現要你是否接受這連線的提示,
(也就是know_hosts這檔案中沒這台機器)
所以必須每一台都要登入過一次才能正常使用,
也許用expect這套件來解決輸入密碼的問題更好,
改天再來研究看看。