安裝openssh

##安裝opensshphp

電腦中只有Ubuntu11.04,且系統中默認自帶的只有ssh的客戶端,而沒有服務端。可是想體驗下ssh登陸Linux功能,只好本身編譯安裝虛擬機裏面的openssh。查看系統中是否有ssh服務端運行ps -e | grep sshcss

30 ?        00:00:00 sshd 373 ? 00:00:00 ssh-agent 

其中ssh-agent是ssh的客戶端,而sshd纔是後臺服務,桌面版本系統通常都沒有,須要自行安裝linux

在Ubuntu中編譯安裝程序須要build-essential,經常使用的gcc編譯工具系統已經自帶,缺乏的只是autoconf和automake,編譯autoconf須要m4,所以須要先安m4,直接到官網上下載最新的m四、autoconf和automake,使用tar -xzvf xxx.tar.gz解壓後,進入目錄,參考readme和Install兩個文件編譯,make install須要root權限,由於安裝時通常須要安裝到/usr/local/目錄下,而普通用戶沒有寫權限nginx

./configure 
make make test sudo make install 

安裝完編譯環境後,準備安裝openssh,在它的說明文檔中寫了依賴3個庫,autoconf、zlib和openssl,安裝時須要注意版本的匹配,不必定用最新的版本。我在ubuntu上zlib使用的最新版本,openssl使用的1.0.2m版本,openssh下載的時7.6版本。shell

安裝方法仍是同樣的make一套,只是openssl用的時./config,它裏面根據系統的差別再去調用./Configure。須要注意的地方:ubuntu

  • 不能在虛擬機vmware的共享目錄下直接執行config編譯openssl,須要拷貝到linux內部的目錄中,不然在中間建立符號連接時會失敗,make時提示No rule to make target../include/openssl/bio.h', needed by cryptlib.o'. Stop.MAKE
  • openssl編譯時必須設置爲動態庫方式編譯,不然openssh編譯不了。./config --shared
  • 編譯完成openssl後須要確認當前系統默認的openssl爲本身剛剛編譯的版本,若是系統以前自帶了openssl,會致使openssh在configure時提示checking OpenSSL header version... not found錯誤。查看當前系統openssl版本openssl version -a。正常本身編譯安裝的程序若是在configure時不指定--prefix=dir安裝目錄的話,通常會安裝在/usr/local/ssl,而系統默認的目錄爲/usr/bin/openssl以及/usr/include/openssl,所以須要建立符號連接,將剛編譯的openssl做爲默認,具體路徑須要參考安裝說明中的路徑。
sudo mv /usr/bin/openssl /usr/bin/openssl.old
sudo ln -s /usr/local/ssl /usr/bin/openssl sudo ln -s /usr/local/include/openssl /usr/include/openssl # 動態庫目錄設置,這個命令執行時提示沒有權限,失敗 sudo echo "/usr/local/ssl/lib" >> /etc/ld.so.conf 

在ubuntu中/etc/ld.so.conf指明瞭系統當前動態庫的查找目錄其中只有一句話緩存

include /etc/ld.so.conf.d/*.conf 

本質上就是包含了ld.so.conf.d這個目錄下的全部動態庫配置,例如其中就有一個libc.conf指明瞭c庫的默認位置爲/usr/local/lib,同理能夠在這個目錄下新建一個openssl.conf的文件,在其中加一句話/usr/local/ssl/lib便可。在設置庫目錄後,須要執行一次sudo ldconfig來讓系統更新一下庫目錄緩存/etc/ld.so.cache文件安全

至此,openssh的make已經沒有問題,可是在install時會提示Privilege separation user sshd does not exist,這個和openssh的分權用戶有關,bash

所謂特權分離(Privilege Separation)其實是一種 OpenSSH 的安全機制,該特性默認開啓,可經過配置文件中的 UsePrivilegeSeparation 指令開啓或關閉。ssh

須要執行如下操做後,再sudo make install

sudo mkdir -p  /var/empty #設置一個空目錄 sudo chown 0:0 /var/empty #全部者和組,0表明"root" sudo chmod 000 /var/empty #目錄權限設置爲"000" sudo groupadd sshd #創建sshd組 sudo useradd -g sshd -c 'sshd privsep' -d /var/empty -s /bin/false sshd #用於特權分離的非特權用戶"sshd" 
  • 啓動openssh服務

編譯安裝的ssh不會建立/etc/init.d/sshd服務啓動腳本,只有使用安裝包安裝的纔有。所以要啓動sshd服務,須要直接執行sudo /usr/local/sbin/sshd,注意此處不能直接執行sudo sshd,系統會提示要用絕對路徑執行,網上有講這個是由於sbin屬於root用戶,普通用戶下是不能直接執行sbin下的命令。

  • 自動啓動sshd

    1. /etc/rc.local中的exit 0以前添加/usr/local/sbin/sshd & ,讓系統在初始化時執行

    2. 本身手動建立一個sshd的shell腳本文件放在/etc/init.d/目錄下,並給文件增長執行權限chmod +x sshd,文件的內容爲

      #!/bin/bash cd /usr/local/sbin ./sshd & 
    3. 而後到/etc/rc3.d/目錄下創建一個連接到剛剛的sshd文件,標識系統在3級運行時就啓動這個服務

      # cd /etc/rc3.d # ln -s ../init.d/sshd S13sshd 

  • /etc/rcN.d/簡要說明

init.d 目錄下放了系統安裝程序時對應的服務啓動或中止的腳本,可是系統不是直接從這個目錄中直接執行腳本文件,而是根據當前系統的運行級別來決定指定哪些腳本。 init進程上來首先作的事是去讀取/etc/目錄下inittab文件中initdefault id值,這個值稱爲運行級別(run-level)。它決定了系統啓動以後運行於什麼級別。運行級別決定了系統啓動的絕大部分行爲和目的。這個級別從0到6 ,具備不一樣的功能。不一樣的運行級定義以下: 

  • 0 - 停機(千萬別把initdefault設置爲0,不然系統永遠沒法啓動)
  • 1 - 單用戶模式
  • 2 - 多用戶,沒有 NFS
  • 3 - 徹底多用戶模式(標準的運行級)
  • 4 – 系統保留的
  • 5 - X11 (x window)
  • 6 - 從新啓動 (千萬不要把initdefault 設置爲6,不然將一直在重啓 )

/etc/rcN.d/中的數字N就表明了對應的運行級別要執行的腳本的目錄,經過這些目錄將不一樣級別執行的服務區分。而全部的服務腳本本質都在init.d這個目錄中,而rcN.d中則是軟連接到了實際的腳本文件。例如級別3要啓動的服務都放在rc3.d這個目錄下。這個目錄下文件名又以Sxx或Kxx開頭,其中S表示啓動一個服務,K標識中止一個服務,而xx標識執行的順序,數字越小,越早執行,這樣能夠處理服務之間的相互依賴關係。

相關文章
相關標籤/搜索