星期日, 11月 23, 2008

user_xattr in SuSE Linux

在使用SuSE Linux Enterprise Server 的時候都會在管理Partition的時候
看到預設的mount option 為 acl,user_xattr

acl 為Access Control List, 但是 user_xattr 的mount option 就比較少看到

參考小州老師的文章
引用於:
http://www.lccnet.com.tw/commercial/e-paper/0507/lecture_02.html

Extended Attribute (EA),可以讓使用者對於檔案目錄提供額外的標籤紀錄來表示內容描述


所以就來實做lab 一下
首先先觀察是否有啟用 user_xattr的 mount option
linux-mk16:~ # cat /etc/fstab | grep home
/dev/sda3 /home ext3 acl,user_xattr,usrquota,grpquota 1 2

所以目前是有加上 user_xattr 選項
ok, 來實際lab

linux-mk16:/home/max # touch /home/max/xattr_test
linux-mk16:/home/max # ls /home/max/
big2 maxfile maxfile2 maxfile3 xattr_test

建立一個檔案 xattr_test 於/home/max

linux-mk16:/home/max # getfattr /home/max/xattr_test
觀察相關的資訊

使用setfattr 設定 相關的資訊
linux-mk16:/home/max # setfattr -n user.max -v "max info" /home/max/xattr_test
linux-mk16:/home/max # setfattr -n user.ines -v "ines label" /home/max/xattr_test

再次觀察相關的資訊,會看到名稱的資訊
linux-mk16:/home/max # getfattr /home/max/xattr_test
getfattr: Removing leading '/' from absolute path names
# file: home/max/xattr_test
user.ines
user.max

根據名稱來觀察裡面的value
linux-mk16:/home/max # getfattr -n user.max /home/max/xattr_test
getfattr: Removing leading '/' from absolute path names
# file: home/max/xattr_test
user.max="max info"

linux-mk16:/home/max # getfattr -n user.ines /home/max/xattr_test
getfattr: Removing leading '/' from absolute path names
# file: home/max/xattr_test
user.ines="ines label"


^__^
Lab 完成, 提醒一下自己

星期日, 10月 26, 2008

修復 iphone 照相功能不能存檔的問題

爸爸有反應 iphone 照像功能不能存檔

觀察了一下, 想說應該是資料夾的問題

爬了一下文 , 還不止一個人碰到.



解決的方式為


  1. 安裝 OpenSSH套件於iphone

  2. 利用putty 連入iphone的ssh (帳號是root, 密碼為 alpine)

  3. 檢查/private/var/mobile/Media/DCIM/100APPLE(或是101APPLE) 擁有人為mobile 群組為wheel

  4. 刪除/private/var/mobile/Media/DCIM 中 .misc 這個管理縮圖出問題的資料夾


完成修復的動作


星期三, 10月 15, 2008

OpenSolaris and Weka

之前因為發現 JVM有記憶體限制的問題
以32 bit平台來說
在windows下只能跑 1.4 GB
在Linux 下只能跑 1.7 GB
但是在Solaris下就可以跑 3.9 GB

所以就跑去安裝 OpenSolaris x86_64的版本
在這個網頁下載 OpenSolaris 2008.05 版本,
http://opensolaris.org/os/downloads/

這個版本的iso燒錄出來是Live CD, 可以當Live CD使用也可以拿來安裝

我把他放在VMWare內啟動, 第一個步驟會選取鍵盤的語系, 預設是美式鍵盤 41接下來選取語系, 這邊我用的是繁體中文 2

順利的話就會進入桌面, 點選桌面上的 "安裝 OpenSolaris"
就會進入安裝畫面, 點選下一步
這個時候會詢問要安裝到哪個分割區, 這邊我選的是整顆硬碟
接下來選取時區及地區, 當然是選取台灣台北
選取語系, 繁體中文
接下來輸入root密碼及使用者的資訊
開始安裝
安裝完成後, 需要重新開機
這樣安裝就大功告成

登入畫面還蠻漂亮的說

接下來到weka的網站下載weka的程式
http://www.cs.waikato.ac.nz/~ml/weka/index_downloading.html

由於是 Solaris 所以當然下載 Other platforms (Linux, etc.)
下載
weka-3-5-8.zip
下載之後照著他的說明

Click here to download a zip archive containing Weka
(weka-3-5-8.zip; 18,596,454 bytes)

First unzip the zip file. This will create a new directory called weka-3-5-8. To run Weka, change into that directory and type

java -jar weka.jar

Note that Java needs to be installed on your system for this to work. Also note, that using -jar will override your current CLASSPATH variable and only use the weka.jar.


$cd /export/home/max/Desktop
$unzip weka-3-5-8.zip
$cd weka-3-5-8
$java -jar weka.jar

發現雖然可以呼叫出 weka但是weka的 explorer卻不能用
後來在網路上找了很久的答案, 找到一個解決方式
就是在使用者家目錄下建立一個檔案 LookAndFeel.props
內容為Theme=javax.swing.plaf.metal.MetalLookAndFeel
可用下面的指令來建立

$echo "Theme=javax.swing.plaf.metal.MetalLookAndFeel " > ~/LookAndFeel.props

就可以順利呼叫 weka的 explorer

^^

星期三, 10月 01, 2008

linux shell echo 的顏色控制

可以參考下列兩個網址
http://ssorc.tw/rewrite.php/read-875.html

http://blog.roodo.com/prin339/archives/1121381.html

在撰寫shell script 很有用處

星期六, 9月 27, 2008

20080927 SQL 入門班筆記

20080927

SQL 入門班 邱梓君


先考70-431 再考 70-443 70-444


Lab:執行第一次啟動

開始 --> 所有程式 --> Microsoft SQL Server 2005 --> SQL Server Management Studio --> 連接



Notes:

  • Microsoft SQL Server Management Studio 只是圖形介面不是SQL Server, 關閉這個介面不是關閉SQL Server

  • 要使用指令的話可以點選''新增查詢''

  • 為了避免各產品之間的SQL語法不相容, 因此由ANSI( American National Standard Institute 美國國家標準局 ) 制定出SQL-92, 定義出SQL 的關鍵字與語法標準, 以提高各家產品在SQL語法上的相容性. 但正因SQL-92 為統一標準, 自然無法發揮各家資料庫其特殊的長處, 因此業界真正使用的SQL語言, 通常是包含SQL-92 所定義的標準內容, 另外再加上自家資料庫額外擴充的功能.

  • SQL語法( Structured Query Language ) 並不是SQL Server

  • SQL語言不能獨立執行.

  • Tel.xls.exe 隨身碟病毒( task manager 會看到algprocess )

  • SQL語言的功能分類

    • DDL( Data Definition Language 資料定義語言 )

    • DML( Data manipulation Language 資料處理語言)

    • DCL( Data Control Language 資料控制語言 )


Lab:新增資料庫

開啟Microsoft SQL Server Management Studio

以圖形介面的方式

展開本機 --> 資料庫 --> 滑鼠右鍵 --> 新增資料庫 --> 輸入資料庫名稱 --> 確定

建立完成( 可以參考右邊的資料庫會多出NewNew 資料庫)

如果要刪除資料庫, 請於NewNew資料庫上 --> 滑鼠右鍵 --> 刪除 --> 確定


以命令提示字元的方式

點選''新增查詢''

輸入CREATE DATABASE NewNew --> 點選 '執行'

輸入DROP DATABASE NewNew -->點選 ' 執行'

  • 使用 指令的方式建立資料庫要在資料庫--> 滑鼠右鍵 --> 重新整理 才會看到成果

  • 如果要執行特定指令, 要先選取某一個指令, 再去按執行, 不然會從頭開始執行.

  • 資料庫的名稱看起來沒有分大小寫




每個資料庫包含

  • MDF 1 ( SQL Server Database Primary Data File只能有一個)

  • NDF 0 ~ no_limit

  • LDF 1 ~ no_limit ( SQL Server Database Transaction Log File 內容為Log , 至少會有一個為了還原使用, 所以Log檔重要性大於資料庫)



解決字型過小的問題

工具 --> 選項 --> 環境 --> 字型和色彩 --> 選取自訂的大小


Notes:

  • 在資料庫內的自動成長, 切記不要使用預設值 ( 會長大的很快, 視單位狀況而定 ), 微軟建議如果資料量小於 1GB 可以使用MB為單位, 如果大於1GB建議以百分比為單位.

  • 資料庫的初始大小, 在實務上如果已經知道資料庫的大小就直接給足整顆硬碟. 不需要讓SQL Server 還要去做自動成長浪費時間, 直接給足.

  • 不要把資料庫放在系統碟, 最好整顆都給資料庫( 讓資料庫可以在硬碟做循序存取, 效能的差異很大 )


Lab: 建立資料庫,並建立兩個群組

先於 C:\ 建立資料夾名稱為 新新

C:\新新 資料夾內建立資料夾, 名稱為主主 ( 存放MDF )

C:\新新 資料夾內建立資料夾, 名稱為LOG ( 存放LDF )

C:\新新 資料夾內建立資料夾, 名稱為次次1 ( 存放NDF )

C:\新新 資料夾內建立資料夾, 名稱為次次2 ( 存放NDF )


開啟Microsoft SQL Server Management Studio

展開本機 --> 資料庫 --> 滑鼠右鍵 --> 新增資料庫 --> 輸入資料庫名稱(NewNew) --> 確定

修改邏輯名稱 NewNew 為 新新( 確認可以支援中文) --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\主主 --> 確定


修改邏輯名稱 NewNew_log 為新新_log --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\LOG --> 確定


點選' 加入' 按鈕 --> 輸入邏輯名稱 次次1 --> 檔案群組 點選 '新增檔案群組' --> 輸入群組名稱 '第一群' --> 確定 --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\次次1 --> 確定


點選' 加入' 按鈕 --> 輸入邏輯名稱 次次2 --> 檔案群組 點選 '第一群' --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\次次1 --> 確定


點選' 加入' 按鈕 --> 輸入邏輯名稱 次次3 --> 檔案群組 點選 '第一群' --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\次次1 --> 確定



點選' 加入' 按鈕 --> 輸入邏輯名稱 次次4 --> 檔案群組 點選 '新增檔案群組' --> 輸入群組名稱 '第二群' --> 確定 --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\次次2 --> 確定


點選' 加入' 按鈕 --> 輸入邏輯名稱 次次2 --> 檔案群組 點選 '第二群' --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\次次2 --> 確定


點選 '確定' 完成新增NewNew資料庫的練習

此時可以觀察 C:\新新 資料夾下面的檔案分佈

此時NewNew資料庫結構如下

  • Primary

    • 內含新新.mdf

  • 第一群

    • 內含次次1.ndf, 次次2.ndf, 次次3.ndf

  • 第二群

    • 內含次次4.ndf, 次次5.ndf

  • LOG(不包含於群內)

    • 內含新新_log.ldf


中午休息

常用的指令於command-line

sp_helpdb 查閱目前伺服器中的所有資料庫

sp_helpdb 資料庫名稱 查閱指定資料庫

例如 sp_helpdb NewNew


卸離與離線工作的差別

  • 離線工作

    • 使用者連線不到資料庫, 但是還是可以在Microsoft SQL Server Management Studio看到

    • 可以在該資料庫上方 使用滑鼠右鍵 --> 工作 --> 線上工作 來掛載回來

  • 卸離

    • 使用者連線不到資料庫, 但是也不能在Microsoft SQL Server Management Studio看到

    • 可以在該資料庫上方 使用滑鼠右鍵 --> 工作 --> 卸離 --> 確定

    • 可以在資料庫上方 使用滑鼠右鍵 --> 附加 --> 加入 --> 選取MDF檔案位置 --> 確定 --> 確定


command-line 來做卸離

sp_detach_db 資料庫名稱


command-line 來做附加

sp_attach_db 資料庫名稱 'MDF 所在位置'




command-line 來做附加

CREATE DATABASE 資料庫名稱

ON

( FILENAME='C:\新新\主主\新主.MDF')

FOR ATTACH



Notes:

  • 當有人在使用資料庫的時候不可以調整資料庫( 錯誤訊息會告知正在使用中)

  • 卸離的目的為昇級或是移動

  • MDF 會記住卸離前的檔案位置, 至少要告訴MDF 檔案新的檔案位置

  • 可以按鍵盤上面的F5 來執行

  • 一次要執行多到指令, 請用GO 隔開


Lab: 卸離資料庫以及附加資料庫

卸離NewNew資料庫

  • NewNew資料庫上方 --> 工作 --> 卸離 --> 確定

使用command-line 附加

  • command-line 輸入

    create database NewNew

    on

    (filename='c:\新新\主主\新新.mdf')

    for attach

  • 將上述指令選取起來 --> 點選 '執行'

觀察左方就會發現NewNew資料庫已經附加上來



ALTER DATABASE 敘述修改資料庫 ( 使用圖形介面會比較快)



Lab: 修改資料庫

C:\新新 資料夾內建立資料夾, 名稱為次次3 ( 存放NDF )

請確認NewNew資料庫有被附加

command-line 畫面輸入

--修改資料庫, 新增一個檔案群組

ALTER DATABASE NewNew ADD FILEGROUP 第三群

GO

--修改資料庫, 新增一個檔案至指定的檔案群組

ALTER DATABASE NewNew

ADD FILE

(

NAME=次次6, FILENAME='C:\新新\次次3\次次6.NDF',

SIZE=10MB, MAXSIZE=50, FILEGROWTH=8%

) TO FILEGROUP 第三群

GO

--修改資料庫, 新增一個檔案至指定的檔案群組

ALTER DATABASE NewNew

ADD FILE

(

NAME=次次7, FILENAME='C:\新新\次次3\次次7.NDF',

SIZE=10MB, MAXSIZE=50, FILEGROWTH=8%

) TO FILEGROUP 第三群

GO

--修改資料庫, 設定指定的檔案群組為預設群組

ALTER DATABASE NewNew

MODIFY FILEGROUP 第二群 DEFAULT

GO

--修改資料庫, 設定指定的檔案群組為唯讀群組

ALTER DATABASE NewNew

MODIFY FILEGROUP 第三群 READ_ONLY



Lab:修改設定值


先觀察NewNew 資料庫

NewNew 資料庫上方 --> 滑鼠右鍵 --> 屬性


command-line


ALTER DATABASE NewNew SET RECOVERY SIMPLE

GO

ALTER DATABASE NewNew SET ANSI_NULLS ON

GO

ALTER DATABASE NewNew SET ANSI_NULL_DEFAULT ON

GO

ALTER DATABASE NewNew SET AUTO_SHRINK ON

GO


再觀察NewNew 資料庫

NewNew 資料庫上方 --> 滑鼠右鍵 --> 屬性


觀察屬性的改變

Notes:

  • 利用圖形介面可以在資料庫的屬性內, 藉由 '選項' 內的 '狀態' --> '限制存取' 內可以調整為single來讓其他使用者離線

  • command-line 可以使用 ALTER DATABASE NewNew SET SINGLE_USER WITH ROLLBACK IMMEDIATE 來立即把資料庫斷線

  • command-line 可以使用 ALTER DATABASE NewNew SET MULTI_USER 來回復多人模式




資料型別

  • 整數 使用的位元數

    • bigint 8bytes

    • int 4bytes

    • smallint 2bytes

    • tinyint 1bytes

    • bit 1bit

  • 近似浮點數

    • float 8bytes

    • real 4bytes

  • 日期時間

    • datetime 8bytes

    • smalldatetime 4bytes

  • 精確位數

    • numeric

    • decimal

  • 字串

    • char 1個字元1byte, 為固定長度, 未填滿的部份, 會自動補上空白字元

    • varchar 1個字元1byte, 儲存多少即佔多少空間

    • text 1個字元1byte, 儲存多少即佔多少空間, 最大可達2GB

  • Unicode 字串 雙位元文字編碼標準

    • nchar 1個字元2byte, 為固定長度, 未填滿的部份, 會自動補上空白字元

    • nvarchar 1個字元2byte, 儲存多少即佔多少空間

    • ntext 1個字元2byte, 儲存多少即佔多少空間, 最大可達2GB


Notes:

  • char 還有varchar 差別在如果沒有填滿, 會不會補空白字元, varchar 還有char 佔用的空間都一樣, varchar沒有比較省空間, 只是對程式開發人員, 在撈資料的時候字數會不同(不用考慮空白字元的問題, 不需特別處理去除空白字元).

    • varchar 可變動 不會補空白字元

    • char 不可變動 會補空白字元

  • 以資料庫的角度, 使用char 的方式會比較好, 不用去計算哪些資料沒有使用

  • 以程式人員的角度, 使用varchar 的方式會比較好, 不用處理空白字元





星期六, 9月 20, 2008

20080920結構化佈線 speaker ZMAN

20080920

主講人 ZMAN


資料通訊與佈線設計 祝國忠譯 博碩文化

電腦網路與連結技術 黏添壽著 旗標


給老闆的報表重點

  • 前言

  • 整體成本

  • 效益


如果沒有辦法了解公司所有部門的運作, 不是MIS只是水電工


哈克大大的案例了解成功的MIS

  • LCD --> 直接找原廠/買最便宜的model, 但是老闆最知名的品牌( Viewsonic), 購買完之後做公司省電報告


  • 軟體授權 --> 找所有賣軟體的廠商, 順便凹廠商送教育訓練

  • IP PHONE --> 在導入的很久之前, 就先找人邊吃午餐邊簡報給老闆, 先導入觀念

  • 3COM --> 單一品牌, 單一型號( 為何要讓我的公司設備有兩個型號? 讓我的IT 人員及老闆複雜化?)

  • 廠商分類栽培 --> 讓專業的廠商來負責

  • ITIL --> 讓老闆知道, 準備好當主管

  • 人緣極好 --> 所有部門都是我們服務的對象, 讓所有的部門喜歡, 是升主管的關鍵


TAI-942 目的

  • 建立國際通用的標準

  • 單一標準建立 Data Center


標準要參考活用( 誰說設備上面不能寫校長室01 校長室02這樣的標籤?) 只要管理人員可以一目了然即可



Data Center

  • EDC: Enterprise Data Center 私有的數據中心

  • IDC: Internet Data Center 公開租賃的數據中心


非結構化佈線架構

  • 單一用途, 拉一條線, server直接接線到Switch, 缺點是非常不彈性


結構化佈線架構

  • 已經事先把機櫃及配線櫃線路事先佈置好, 以針對需求改變port用途, Server 接線在單櫃的panel, 只要對應的配線櫃接到switch 就完成連線.


DATA Center 關鍵指標

  • 可靠性( Reliability) –MTBF( Mean Time Between Failures)

  • 可服務性( Serviceability) – MTTR( Mean Time to Repair)

  • 可用性(Availiability)

DATA CENTER 四個層級

  • Tier I 沒有任何備援

  • Tier II 部分備援

  • Tier III Active/Stand by 可快速維修

  • Tier IV Active/Active 故障容錯


機房的窗

  • 不可以有外窗

    • 因為熱會浪費一堆空調電費

    • 因為窗戶會破, 有安全問題

  • 可以有內窗


機房的溫溼度

  • 乾球溫度 20 – 25

  • 相對溼度 40% -- 55%

  • 恆溫恆濕是機房基本需求


TAI-942 最重要的概念

冷熱通道( 冷氣流及熱氣流必須分開, 機櫃應該前吸風後排風)


機櫃該如何擺

  • 機櫃之前的通道120CM

  • 機櫃之間門對門, 後面對後面 以分開冷熱流


新建築物 – 提早要求的事

  • 機房位置

    • (機房到client 盡量不要破白米, 分機房跟總機房儘量用銅線), 不是為了省光纖而是買不起後面的設備

  • 機房大小:

    • 要先要空間大小及形狀( 視機櫃大小調整, 而且要規劃到 Max大小)

  • 要求資訊管線

    • 沒有獨立的資訊管線, 會有很多問題, 也要注意管線的大小問題

  • 要求獨立電力

  • 如果有柴油發電機 , 你要告知加上你的用電量

  • 要求獨立空調

  • 機房位置永久不變

  • 不準土建, 機電將佈線包在大包內


機櫃用一輩子不會壞, 值得多花一點錢, 買錯丟不了

  • 不好的機櫃缺乏管理機制, 線路錯綜複雜

  • 有些機櫃前面使用壓克力門, 後面線路錯綜複雜會妨礙機櫃散熱

  • 配線櫃正常是使用兩柱開放式機櫃

  • 伺服器正常是使用四柱開放式機櫃

  • 傳統的理線槽也有阻礙散熱的疑慮( 一般來說都是2U, 1U是整人用^^)

  • 買機櫃一定要請廠商把圖畫好



國產機櫃與進口機櫃的差異

  • 精密度

  • 柱子移動容易性

  • 管理機制

  • 配件多寡


高熱量時代來臨, 機房用電比例

  • 空調 50%

  • 設備 38%

  • 電力傳輸及轉換 10%

  • 照明 2%


幾個綠色的方法

  • 正確的空調設計

  • 高轉換效率UPS

  • 使用正確的機櫃

  • 刀鋒伺服器整合

  • 虛擬化—OS/AP/STORAGE

  • 伺服器電源管理系統


機房空調

  • 現代的機房是個熱源分布不平均的地方, 所以不可以用傳統的方式以坪數來計算冷房能力

  • 使用耗電量來反推冷房能力

  • 下吹式冷氣

    • 兩公分的隔熱層, 至少45公分的高架地板

    • 恆溫恆溼正壓/隔熱層/樓層高度

  • 下吹式冷氣失敗的原因

    • 距離太遠, 冷氣送不到

    • 距離太, 熱氣回不來就吸走

    • 地板到處開動, 冷氣都逸散掉( 最常見 )

    • 太高密, 超出散熱能力


機房電力

  • UPS – Uninterruptible Power Supply

  • PDU -- Power Distribution Unit

  • POU -- Power Outlet Unit ( 多孔插座)

  • 所有的電都是由機櫃反推回來


UPS

  • 建議使用並聯式設計, 可依照需要來擴充

  • 如果是使用Standalone 那擴充上會有問題

  • 實際上的最愛 台達電NH系列

  • 建議買負載顯示型POU( 可以清楚知道用電量)

有機會做正規的機房, 光纖跟銅線做上面, 電線做下面


機房的環控( 美國SENSAPHONE 網路機房監控)

  • 溫度

  • 溼度

  • 電力

  • 煙霧

  • 漏水

  • 入侵

  • 網路/伺服器

  • UPS/空調



星期一, 9月 15, 2008

NFS nfs illegal port 問題小記

在VMWare 環境內, 如果透過NAT 來存取NFS
有可能會因為存取的要求Port 大於1024
產生illegal port 的錯誤存取訊息

解決的方式為
在 /etc/exports 的設定檔內加上 insecure的參數
允許 大於1024 以上的Port 連線

這邊先小記一下
以免以後忘記

奇怪的網頁綁架方式


這種網頁的綁架方式之前有遇過
但是因為都是在VMWare內的作業系統
所以沒有去理會他
但是這次心血來潮想說看一下
所以先去檢查
C:\WINDOWS\system32\drivers\etc\hosts
沒有被更動的現象

使用 nslookup 也正常
IE 與 Firefox都中獎

小紅傘也沒有偵測出來
但是發現使用
ipconfig/flushdns
來清除DNS快取可以暫時停止他
但是對某些網頁又無效

先記下來
改天研究 ^__^

星期一, 9月 01, 2008

利用cygwin同步Windows Server Part II

建立好cygwin 於Windows Server上後並啟動ssh服務之後
決定以 falsead 這個帳號在Windows Server 上面來當管理帳號
所以在Windows Server上面建立falsead 這個使用者並加入到administrators 群組

建立完之後嘗試以 scp 指令複製id_dsa.pub到Windows Server上面, 發現驗證失敗



以falsead這個帳號登入到Windows Server
並啟動桌面上的cygwin捷徑, 發現要執行

#mkpasswd -l > /etc/passwd
#mkgroup -l > /etc/group
來更新密碼及群組
所以進行密碼及群組的更新
更新之後, 再次嘗試連線, 發現可以連線成功, 只是找不到該目錄
這個時候再把Windows Server上面的Cygwin 視窗關掉, 重新啟動一次
重新啟動之後就會發現, 這個時候的家目錄就會自動建立( 之前都是在 /cygdrive/c/Documents and Settings/home/falsead/, 那是臨時的目錄)
接下來可以利用 #mkdir /home/falsead/.ssh 或是下 #ssh 127.0.0.1建立 .ssh目錄儲存金鑰

接下來再度測試使用scp 複製金鑰及遠端下指令就成功了

星期二, 8月 26, 2008

利用cygwin 同步 Windows and Linux 伺服器

因為 Windows 還有 Linux的伺服器比較多台
在沒有網域及NIS的狀況底下要同步帳號及密碼
又不想用LDAP

所以就在Window Server上面裝了 cygwin 來執行 Linux的SSH

********************************************************************
在Windows 伺服器上面 ( 要被同步的client)
http://www.cygwin.com/setup.exe
安裝 cygwin

選取從網路安裝, 安裝來源可以選 台大 ( ftp://ftp.ntu.edu.tw)
選取套件
  • Openssh --> 從Net套件安裝
  • diffutils --> 從Utils套件安裝
安裝完畢之後點選桌面上的cygwin 捷徑進入cygwin
輸入
$chmod +r /etc/passwd
$chmod +r /etc/group
$chmod 777 /var
$ssh-host-config

詢問要建立私有權限帳號就答應他吧 ^^

設定好之後, 使用指令啟動 sshd
$net start sshd

接下來要建立個人家目錄內的 .ssh 目錄來存放金鑰
$ssh 127.0.0.1

未必要完成連線, 有這個動作就可以建立 ~/.ssh 目錄了

*******************************************************************

在Linux 伺服器上面
要建立個人家目錄內的 .ssh 目錄來存放金鑰
#ssh 127.0.0.1
未必要完成連線, 有這個動作就可以建立 ~/.ssh 目錄了

#ssh-keygen -d
連續按三下 Enter 鍵建立 DSA的金鑰

#scp ~/.ssh/id_dsa.pub administrator@Windows伺服器的IP:~/.ssh/authorized_keys

這樣以後連線就不需要密碼直接以Key 驗證

建立一個工作資料夾在 /root/lab
#mkdir /root/lab

將Windows Server 的IP 寫在 /root/lab/winserver
內容範例如下
192.168.3.131
192.168.3.134

將Linux Server 的IP 寫在 /root/lab/linuxserver
內容範例如下
192.168.3.136



編寫一個同步的 shell script
#vi syncaccount.sh
#!/bin/bash
# define windows server's ip
echo "****************************************************"
for i in $( cat /root/lab/winserver )
do
echo "Windows server's IP is $i"
done
for q in $( cat /root/lab/linuxserver )
do
echo "Linux server's IP is $q"
done
echo "****************************************************"

echo "Please select your task"
echo "1)to add user account please input --------> useradd"
echo "2)to delete user account please input -----> userdel"
echo "3)to change user's password please input --> passwd"
echo "4)to quit this script please input --------> quit"
echo "please input your choice"

#read the root's task from read
read task

case "$task" in
useradd)
echo "****************************************************"
echo "exec add a user account"
echo "please input user's name"
echo "****************************************************"
read useraddname
echo "****************************************************"
echo "we will add user $useraddname"

for i in $( cat /root/lab/winserver )
do
echo "windows server is $i, add user $useraddname"
ssh administrator@$i "net user $useraddname /add"
done


for q in $( cat /root/lab/linuxserver )
do
echo "Linux server's IP is $q, add user $useraddname"
ssh $q "useradd -m $useraddname"
done
;;
userdel)
echo "****************************************************"
echo "exec del a user account"
echo "please input user's name"
echo "****************************************************"
read userdelname
echo "****************************************************"
echo "we will delete user $userdelname"

for i in $( cat /root/lab/winserver )
do
echo "windows server is $i, del user $userdelname"
ssh administrator@$i "net user $userdelname /delete"
done


for q in $( cat /root/lab/linuxserver )
do
echo "Linux server's IP is $q, del user $userdelname"
ssh $q "userdel -r $userdelname"
done
;;
passwd)
echo "****************************************************"
echo "exec change user's password"
echo "please input user's name"
echo "****************************************************"
read userpasswdname
echo "****************************************************"
echo "please input user's password"
echo "****************************************************"
read userpasswd
echo "we will set user $userpasswdname password"

for i in $( cat /root/lab/winserver )
do
echo "windows server is $i, change user $userpasswdname password"
ssh administrator@$i "net user $userpasswdname $userpasswd"
done


for q in $( cat /root/lab/linuxserver )
do
echo "Linux server's IP is $q, change user $userpasswdname password"
ssh $q "echo $userpasswd |passwd --stdin $userpasswdname"
done
;;
quit)
exit
;;
*)
echo "you type the wrong word"
esac


執行shell script
#sh syncaccount.sh

enjoy it~~~~