一、關閉並卸載RedHat9.0自帶的Openssh
1.1 停止服務
復制代碼代碼如下:#service sshd stop
1.2 卸載Openssh
復制代碼代碼如下:#rpm -e openssh --nodeps
#rpm -e openssh-server --nodeps
#rpm -e openssh-clients --nodeps
#rpm -e openssh-askpass-gnome
#rpm -e openssh-askpass
二、下載安裝最新的openssl和openssh
2.1 下載相關軟件包至/usr/local/src目錄
http://www.openssl.org/source/openssl-0.9.8e.tar.gz
2.2 安裝openssl
復制代碼代碼如下:#cd /usr/local/src
#tar zxvf openssl-0.9.8e.tar.gz
#cd openssl-0.9.8e
#./config shared zlib
#make
#make test
#make install
mv /usr/bin/openssl /usr/bin/openssl.OFF
mv /usr/include/openssl /usr/include/openssl.OFF
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
2.3 配置庫文件搜索路徑
復制代碼代碼如下:#echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
#ldconfig -v
2.4 查看openssl的版本號,以驗正是否安裝正確
復制代碼代碼如下:#openssl version -a
OpenSSL 0.9.8e 11 Apr 2007
built on: Sat Mar 24 21:24:41 CST 2007
platform: linux-elf
options: bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) idea(int) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DSHA1_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM
OPENSSLDIR: "/usr/local/ssl"
三、下載安裝最新的openssh
3.1 下載相關軟件包至/usr/local/src目錄
ftp://openbsd.nsysu.edu.tw/BSD/OpenBSD/OpenSSH/portable/openssh-4.6p1.tar.gz
3.2 安裝
復制代碼代碼如下:#cd /usr/local/src
#tar zxvf openssh-4.6p1.tar.gz
#cd openssh-4.6p1
#./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-ssl-dir=/usr/local/ssl --with-md5-passwords --mandir=/usr/share/man
#make
#make install
3.3 查看openssh版本號,驗正安裝結果
復制代碼代碼如下:# ssh -v
OpenSSH_4.6p1, OpenSSL 0.9.8e 11 Apr 2007
usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-e escape_char] [-F configfile]
[-i identity_file] [-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-R [bind_address:]port:host:hostport] [-S ctl_path]
[-w local_tun[:remote_tun]] [user@]hostname [command]
四、啟動並驗正服務的開啟狀況
4.1 調試啟動,如果以下顯示均正常,就可以正常啟動sshd了。
復制代碼代碼如下:#/usr/sbin/sshd -d
debug1: sshd version OpenSSH_4.6p1
debug1: private host key: #0 type 0 RSA1
debug1: read PEM private key done: type RSA
debug1: private host key: #1 type 1 RSA
debug1: read PEM private key done: type DSA
debug1: private host key: #2 type 2 DSA
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-d'
socket: Address family not supported by protocol
debug1: Bind to port 22 on 0.0.0.0.
Server listening on 0.0.0.0 port 22.
Generating 768 bit RSA key.
RSA key generation complete.
4.2 啟動服務
復制代碼代碼如下:#/usr/sbin/sshd
4.3 查看監聽端口中是否有22
復制代碼代碼如下:#netstat -tnlp | grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 21018/sshd
4.4 嘗試從本機通過ssh登錄
復制代碼代碼如下:
# ssh root@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 03:eb:80:fe:07:d9:9d:00:1c:15:37:93:d1:d3:8e:6d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
root@localhost's password:
Last login: Wed Apr 11 11:29:04 2007 from localhost.localdomain
五、sshd進程及其相關參數詳細說明
sshd服務是OpenSSH的守護進程。此服務附帶的工具程序可以取代rlogin和rsh,在兩台會話的主機間通過非安全的Internet 建立起安全的加密連接。sshd監聽來自客戶端的連接請求,並在接收到請求時fork一個子進程;此子進程將負責處理密鑰交換、加密、認證、命令執行及數 據傳輸等。可以使用命令行選項或者配置文件來配置啟動sshd,但命令行中指定的選項將優先於配置文件中的相同選項。
-4 強制sshd僅接收來自IPv4格式地址的請求;
-6 強制sshd僅接收來自IPv6格式地址的請求;
-b 指定ssh v1中服務器密鑰的長度位數;
-D 此選項只是用來監視sshd的啟動狀態,在附加此選項時,sshd不會作為一個守護進程啟動;
-d 此選項將啟動調試模式;sshd服務的啟動狀態會在前台顯示,並把詳細的調試信息輸出至日志文件;此時, sshd不會fork新的子進程,因此僅僅能接受一個連接請求。此先項主要用來調試sshd;
-e 輸出錯誤信息到日志文件,不包括正常的調試信息;
-f 此選項後接指定的配置文件;默認為/etc/ssh/sshd_config;
-g 此選項後跟一個時間期限,默認單位是秒,用來為客戶端認證期間提供一個可以等待的期限;如果客戶端在此指定期限內認證錯誤,sshd將斷開連接並退出;0表示無時間限制;
-h 此選項後跟一個主機密鑰文件,用來指定一個sshd啟動時讀取的主機密鑰
文件;在以非root身份啟動sshd時必須指定此選項(因為默認 的key文件只有root具有讀權限);ssh v1默認的key文件為/etc/ssh/ssh_host_key,sshd v2默認的key文件為 /etc/ssh/ssh_host_rsa_key以
及/etc/ssh/ssh_host_dsa_key;可以為不同版本的協議及不同的密鑰算法指定不同的key文件;
-i 此選項用來指定通過inetd守護進程啟動sshd;sshd需要生成服務端密鑰才能接受客戶端的請求,這將需要大約10秒鐘的時間,如果 每個請求都重新生成一次密鑰的話,客戶端將不得不等待較長的時間,因此,默認情況下是不使用inet方式啟動sshd的;如果使用較短長度的密鑰,此選項 將是一個頗富彈性的選擇;
-k 此選項後跟一個時間期限,用來為ssh v1指定一個重新生成服務端key的時間間隔(默認為一個小時);如此頻繁的生成密鑰的目的在於不 必存儲密鑰,因此,超過了一個小時後恢復通訊期間加密的數據幾乎是不可能的,哪怕機器被攻入亦或被占據,這將在很大程度上提高了安全性;0表示不重新生成 密鑰;
-o 用來為配置文件指定一個新的可用選項;
-p 指定sshd服務監聽的端口(默認是22),可以同時指定多個端口;如果使用此選項,則會忽略配置文件中指定的端口;
-q 安靜模式,此種情況下將不會產生任何系統日志;正常情況下,服務啟動、認證以及每一次終端登錄都會被記錄;
-t 測試模式,僅用來檢查配置文件的正確性及密鑰是否健壯;此選項多用在配置文件改動時;
六、sshd相關的文件詳細說明
復制代碼代碼如下:~/.hushlogin
如果配置文件中分別啟用了PrintLastLog和PrintMotd選項,則此文件可以用來在屏幕顯示前一次的登錄時間以及/etc/motd的內容。但不會顯示Banner選項指定的banner。
復制代碼代碼如下:~/.rhosts
此文件主要用來實現主機間的認證。如果你的主機上有些用戶的主目錄位於NFS文件系統上,則必需把這個文件的權限置為全局可讀,因為 sshd進程將以root的身份讀取此文件。此外,此文件屬主必須為相關用戶,且其他任何用戶均不能具有寫權限。一般推薦的權限為600。
復制代碼代碼如下:~/.ssh/authorized_keys
此文件存儲的是用戶的公鑰,當其遠程登錄時可以用此公鑰為其進行認證。公鑰信息並非要求高度安全性的文件,但仍推薦將其權限置為700。 如果此文件、~/.ssh目錄或者此用戶的主目錄能被其他用戶讀取,則此文件將可能被其他非授權用戶修改或置換。此種情況下,除非在主配置文件中把 StrictModes的值置為"no",否則sshd將不允許使用此文件。
復制代碼代碼如下:~/.ssh/environment
如果此文件存在,將會在用戶登錄時讀入用戶的環境。它只能包含空行、以"#"開頭的注釋行以及形如“name=value”賦值行,推薦權限為600。默認情況下此功能是禁止的,可以通過PermitUserEnviroment選項開啟。
復制代碼代碼如下:~/.ssh/known_hosts
用戶曾成功登入過的主機的host key都將存放於此文件,但不包括系統間已經互相成功認證的主機host key,只能讓root和屬主具有讀寫權限。
復制代碼代碼如下:~/.ssh/rc
此文件用來在用戶的主目錄不能正常訪問前初始化用戶的登錄環境,其權限應該為600。
復制代碼代碼如下:/etc/host.equiv
用於主機間的認證,只能讓root用戶可寫。
復制代碼代碼如下:/etc/nologin
如果這個文件存在,sshd將拒絕除root用戶外的任何其他用戶登錄。在任何用戶在嘗試登錄時,此文件都將被顯示,但所有非root用戶將被拒絕。此文件應該是全局可讀的。
復制代碼代碼如下:/etc/ssh/ssh_known_hosts
存入系統級別的互相認證時已知主機的host key。這個文件需要管理員手動配置,可以將已知主機的公鑰存入於此文件。此文件只能為root或屬主讀寫,但應該是全局可讀的。
復制代碼代碼如下:/etc/ssh/ssh_host_key
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_rsa_key
以上三個文件用來存放主機密鑰的私鑰部分,它們的屬主只能為root用戶,只能被root用戶讀取,不能為其他任何用戶訪問。如果其他用戶可以讀取此文件,則sshd將不能啟動。
復制代碼代碼如下:/etc/ssh/ssh_host_key.pub
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_rsa_key.pub
以上三個文件用來存放主機密鑰的公鑰部分,它們應該是全局可讀的,但只有root用戶可寫。它們分別對應相應的私鑰文件。這些文件並沒有 什麼實際用途,僅僅是用來為用戶認證登錄提供便利,因此常被copy至其它可信的主機中。可以使用ssh-keygen來生成這些文件。
復制代碼代碼如下:/etc/ssh/sshd_config
sshd的主配置文件;