《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > Linux中用SSH配置安全遠(yuǎn)程登錄的實踐
Linux中用SSH配置安全遠(yuǎn)程登錄的實踐
葛秀慧 田 浩 王嘉禎
摘要: 介紹了用SSH配置安全認(rèn)證、生成密鑰以及實現(xiàn)遠(yuǎn)程登錄的具體操作。
關(guān)鍵詞: Telnet 遠(yuǎn)程登錄
Abstract:
Key words :

  摘  要: 介紹了用SSH配置安全認(rèn)證、生成密鑰以及實現(xiàn)遠(yuǎn)程登錄的具體操作。

  關(guān)鍵詞: SSH協(xié)議  Telnet  openSSH

   系統(tǒng)程序員和管理員都喜歡遠(yuǎn)程登錄自己的服務(wù)器,但傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序(如telnet、ftp、rlogin和rsh)及相關(guān)的服務(wù)在本質(zhì)上都是不安全的,因為它們在網(wǎng)絡(luò)上用明文傳送口令和數(shù)據(jù),黑客通過數(shù)據(jù)包截獲工具可以截獲這些口令和數(shù)據(jù)。這些服務(wù)程序的安全驗證方式也存在弱點(diǎn),易受到中間人(man-in-the-middle)方式的攻擊。中間人攻擊方式中,中間人冒充真正的服務(wù)器接收客戶機(jī)發(fā)送給服務(wù)器的數(shù)據(jù),并篡改客戶機(jī)的信息后發(fā)送至真正的服務(wù)器。這使得通信過程不再安全,并且失去了傳送數(shù)據(jù)的私密性。

  SSH(secure shell)是一個在應(yīng)用程序中提供安全通信的協(xié)議。通過SSH可以安全地訪問服務(wù)器。因為SSH把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,確保數(shù)據(jù)的完整和不被篡改,從而確保私密性。這樣中間人攻擊方式就不可能實現(xiàn)了,而且也能夠防止DNS和IP欺騙。另外,傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,所以可以加快傳輸?shù)乃俣?。SSH有很廣泛的用途,它可代替遠(yuǎn)程登錄程序Telnet,又可以為ftp、pop、甚至ppp提供安全的通道,從而在不安全的網(wǎng)絡(luò)環(huán)境下、在客戶/服務(wù)器之間提供安全和加密的信息交流。

  遠(yuǎn)程運(yùn)行SSH時需要遠(yuǎn)程機(jī)器正在運(yùn)行SSHd(SSH守護(hù)程序),SSH的標(biāo)準(zhǔn)端口是22。由于大多數(shù)防火墻對這個端口都是禁用的,所以需要將SSH守護(hù)進(jìn)程指派給Internet服務(wù)的端口上運(yùn)行,因為即使最嚴(yán)密的防火墻也要打開21、8080、25和110中的一個。這樣就可以通過大多數(shù)的防火墻來使用SSH進(jìn)行遠(yuǎn)程登錄。

1 SSH提供的安全認(rèn)證

  SSH提供二種級別的安全驗證。一種是基于口令的安全驗證;另一種是基于密鑰的安全驗證。首先生成一對密鑰,將公鑰安裝在需要訪問的服務(wù)器中。當(dāng)客戶端需要連接到SSH服務(wù)器時,客戶端軟件就會向服務(wù)器發(fā)出請求,請求用自己的密鑰進(jìn)行安全驗證。服務(wù)器收到請求之后,先在該服務(wù)器中尋找客戶端的公用密鑰,然后把它和客戶端發(fā)送過來的公鑰進(jìn)行比較。如果二個密鑰相同,則SSHd生成隨機(jī)數(shù),并用公鑰進(jìn)行加密,然后SSHd將加密的隨機(jī)數(shù)發(fā)回給正在客戶端運(yùn)行的SSH。SSH用私鑰解密后,再把它發(fā)送回客戶端。這樣就完成了整個驗證過程。

2 SSH的具體實現(xiàn)

  (1)確認(rèn)系統(tǒng)已經(jīng)安裝了SSH并進(jìn)行測試

  (2)生成管理SSH密鑰

  SSH的密匙是用SSH-keygen程序管理的。下面是SSH-keygen密鑰生成的一個實例。

  

    

  上述過程需要分別在每個用SSH連接的遠(yuǎn)程服務(wù)器上完成。為了保證他人對于authorized_keys沒有寫的權(quán)限并保證SSH工作,chmod是必須的。如果想從不同的計算機(jī)登錄到遠(yuǎn)程主機(jī),authorized_keys文件也可以有多個公用密匙。這種情況下必須在新的計算機(jī)上重新生成一對密匙,然后重復(fù)上述過程。需要注意的是,當(dāng)取消了主機(jī)上的賬號之后,必須刪掉這對密匙。

3  SSH配置

  (1)配置SSH客戶端

  OpenSSH的配置數(shù)據(jù)可以有三種語法形式,按照優(yōu)先權(quán)從大到小的順序分別是:命令行選項、用戶配置文件(~/.SSH/config)、系統(tǒng)配置文件(/etc/SSH/SSH_config)。所有的命令行選項均能在配置文件中設(shè)置。因為任何配置值都是首次設(shè)置時有效,所以指定主機(jī)的聲明應(yīng)該位于配置文件的最初,而默認(rèn)值則放于文件末尾。下面是/etc/SSH/SSH_

  config文件的內(nèi)容,用戶配置文件可以從系統(tǒng)配置文件修改得到。

  #/etc/SSH/SSH_config文件

  #Host*

    # ForwardAgent no

  # ForwardX11 no

  # RhostsAuthentication yes

  # RhostsRSAAuthentication yes

  # RSAAuthentication yes

  # PasswordAuthentication yes

  # FallBackToRsh no

  # UseRsh no

  # BachMode no

  # CheckHostIP yes

  # StrictHostKeyChecking ask

  # IdentityFile ~/.SSH/identity

  # IdentityFile ~/.SSH/id_rsa

  # IdentityFile ~/.SSH/id_dsa

  # Port 22

  # Protocol 2,1

  # Cipher 3des

  # Ciphers aes128-cbc,3des-cbc,blowfish-cbc,

  #cast128-cbc,arcfour,aes192-cbc,aes2

  # EscapeChar~

  Host*

  ForwardX11 yes

  ForwardAgent no

  FallBackToRsh no

  #/etc/SSH/SSH_config文件到此結(jié)束

  (2)配置SSH服務(wù)端

  SSH服務(wù)器配置文件是/etc/SSH/SSHd_config,對于SSH 1.x和2.x,OpenSSH的配置文件是一樣的。下面是

/etc/SSH/SSHd_config的內(nèi)容:

  #/etc/SSH/SSHd_config文件

  #Port 22

  #Protocol 2,1

  #ListenAddress 0.0.0.0

  #ListenAddress ∷

  # SSH1的HostKey

  #HostKey/etc/SSH/SSH_host_key

  #記錄

  SyslogFacility AUTHPRIV

  LogLevel INFO

  #認(rèn)證:

  PermitRootLogin yes

  #是否允許超級用戶登錄,與telnet不同,SSH缺省允許超

    #級用戶登錄

  StrictModes yes

  SAAuthentication yes

  PubkeyAuthentication yes

  AuthorizedKeysFile .SSH/authorized_keys

  # 禁用rhosts認(rèn)證

  RhostsAuthentication no

  # 禁讀用戶的~/.rhosts和~/.shosts文件

  IgnoreRhosts yes

  # /etc/SSH/SSH_known_hosts中需要host keys

  RhostsRSAAuthentication no

  IgnoreUserKnownHosts no

  # 把這個選項設(shè)置為no,只允許用戶用基于密匙而非基于

    # 口令方式登錄。這能在很大程度上提高系統(tǒng)的安全性。

  PasswordAuthentication yes

  PermitEmptyPasswords no

  #X11Forwarding no

  X11Forwarding yes

  #X11DisplayOffset 10

  #X11UseLocalhost yes

  #PrintMotd yes

  #PrintLastLog yes

  #KeepAlive yes

  #UseLogin no

  #MaxStartups 10

  # no default banner path

  #Banner /some/path

  #VerifyReverseMapping no

  # override default of no subsystems

  Subsystem sftp /usr/libexec/openSSH/sftp-server

  # /etc/SSH/SSHd_config文件到此結(jié)束

4 SSH實現(xiàn)遠(yuǎn)程登錄

  最容易受到監(jiān)聽工具威脅的程序之一是Telnet,Sniffer程序可以輕易地得到用戶的登錄名和密碼。解決的方法就是用SSH替代Telnet。它使傳輸中的所有信息加密,確保了傳輸信息不被竊聽。

  下面是第一次登錄的情況:

  [gxh@cs cs]$ SSH localhost

  The authenticity of host ′localhost(127.0.0.1)′can′t be established.

  RSA key fingerprint is 4b:91:0a:85:7a:ab:f6:1a:f5:51:07:

  33:4d:ba:ec:e3.

  Are you sure you want to continue connecting (yes/no)? yes

  Warning:Permanently added ′localhost′(RSA) to the list of

  known hosts.

  gxh@localhost′s password:

  Last login:Wed Oct 2 06:53:42 2002 from 202.206.196.221

  [gxh@cs cs]$

  以后的登錄情況:

  [gxh@cs cs]$ SSH localhost

  gxh@localhost′s password:

  Last login:Wed Oct 2 09:43:16 2002 from cs

  [gxh@cs gxh]$

5  結(jié)  論

  SSH廣泛使用在Linux中,它的免費(fèi)軟件openSSH更具的生命力。Linux系統(tǒng)中用SSH就能實現(xiàn)安全的遠(yuǎn)程登錄。當(dāng)然對于其他的服務(wù)FTP、POP等,SSH都能安全出色地完成任務(wù),并且SSH在其安全認(rèn)證中可以采用自己獨(dú)特的算法。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。