SSH是指Secure Shell,是一種安全的傳輸協(xié)議,Ubuntu客戶端可以通過(guò)SSH訪問(wèn)遠(yuǎn)程服務(wù)器 。
SSH的簡(jiǎn)介和工作機(jī)制
SSH簡(jiǎn)介
傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序,如:ftp、POP和telnet在本質(zhì)上都是不安全的,因?yàn)樗鼈冊(cè)诰W(wǎng)絡(luò)上用明文傳送口令和數(shù)據(jù),別有用心的人非常容易就可以截獲這些口令和數(shù)據(jù)。而且,這些服務(wù)程序的安全驗(yàn)證方式也是有其弱點(diǎn)的,就是很容易受到“中間人”(man-in-the-middle)這種方式的攻擊。所謂“中間人”的攻擊方式,就是“中間人”冒充真正的服務(wù)器接收你傳給服務(wù)器的數(shù)據(jù),然后再冒充你把數(shù)據(jù)傳給真正的服務(wù)器。服務(wù)器和你之間的數(shù)據(jù)傳送被“中間人”一轉(zhuǎn)手做了手腳之后,就會(huì)出現(xiàn)很?chē)?yán)重的問(wèn)題。
從前,一個(gè)名為T(mén)atu Yl?nen的芬蘭程序員開(kāi)發(fā)了一種網(wǎng)絡(luò)協(xié)議和服務(wù)軟件,稱(chēng)為SSH(Secure SHell的縮寫(xiě))。通過(guò)使用SSH,你可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,這樣“中間人”這種攻擊方式就不可能實(shí)現(xiàn)了,而且也能夠防止DNS和IP欺騙。還有一個(gè)額外的好處就是傳輸?shù)臄?shù)據(jù)是經(jīng)過(guò)壓縮的,所以可以加快傳輸?shù)乃俣?。SSH有很多功能,雖然許多人把Secure Shell僅當(dāng)作Telnet的替代物,但你可以使用它來(lái)保護(hù)你的網(wǎng)絡(luò)連接的安全。你可以通過(guò)本地或遠(yuǎn)程系統(tǒng)上的Secure Shell轉(zhuǎn)發(fā)其他網(wǎng)絡(luò)通信,如POP、X、PPP和FTP。你還可以轉(zhuǎn)發(fā)其他類(lèi)型的網(wǎng)絡(luò)通信,包括CVS和任意其他的TCP通信。另外,你可以使用帶 TCP包裝的Secure Shell,以加強(qiáng)連接的安全性。除此之外,Secure Shell還有一些其他的方便的功能,可用于諸如Oracle之類(lèi)的應(yīng)用,也可以將它用于遠(yuǎn)程備份和像SecurID卡一樣的附加認(rèn)證。
SSH的工作機(jī)制
SSH分為兩部分:客戶端部分和服務(wù)端部分。
服務(wù)端是一個(gè)守護(hù)進(jìn)程(demon),他在后臺(tái)運(yùn)行并響應(yīng)來(lái)自客戶端的連接請(qǐng)求。服務(wù)端一般是sshd進(jìn)程,提供了對(duì)遠(yuǎn)程連接的處理,一般包括公共密鑰認(rèn)證、密鑰交換、對(duì)稱(chēng)密鑰加密和非安全連接。
客戶端包含ssh程序以及像scp(遠(yuǎn)程拷貝)、slogin(遠(yuǎn)程登陸)、sftp(安全文件傳輸)等其他的應(yīng)用程序。
他們的工作機(jī)制大致是本地的客戶端發(fā)送一個(gè)連接請(qǐng)求到遠(yuǎn)程的服務(wù)端,服務(wù)端檢查申請(qǐng)的包和IP地址再發(fā)送密鑰給SSH的客戶端,本地再將密鑰發(fā)回給服務(wù)端,自此連接建立。剛才所講的只是SSH連接的大致過(guò)程,SSH 1.x和SSH 2.x在連接協(xié)議上還有著一些差異。
SSH被設(shè)計(jì)成為工作于自己的基礎(chǔ)之上而不利用超級(jí)服務(wù)器(inetd),雖然可以通過(guò)inetd上的tcpd來(lái)運(yùn)行SSH進(jìn)程,但是這完全沒(méi)有必要。啟動(dòng)SSH服務(wù)器后,sshd運(yùn)行起來(lái)并在默認(rèn)的22端口進(jìn)行監(jiān)聽(tīng)(你可以用 # ps -waux | grep sshd 來(lái)查看sshd是否已經(jīng)被正確的運(yùn)行了)如果不是通過(guò)inetd啟動(dòng)的SSH,那么SSH就將一直等待連接請(qǐng)求。當(dāng)請(qǐng)求到來(lái)的時(shí)候SSH守護(hù)進(jìn)程會(huì)產(chǎn)生一個(gè)子進(jìn)程,該子進(jìn)程進(jìn)行這次的連接處理。
但是因?yàn)槭馨鏅?quán)和加密算法的限制,現(xiàn)在很多人都轉(zhuǎn)而使用OpenSSH。OpenSSH是SSH的替代軟件,而且是免費(fèi)的,
SSH是由客戶端和服務(wù)端的軟件組成的,有兩個(gè)不兼容的版本分別是:1.x和2.x。用SSH 2.x的客戶程序是不能連接到SSH 1.x的服務(wù)程序上去的。OpenSSH 2.x同時(shí)支持SSH 1.x和2.x。
SSH分客戶端openssh-client和openssh-server
如果你只是想登陸別的機(jī)器的SSH只需要安裝openssh-client(ubuntu有默認(rèn)安裝,如果沒(méi)有則sudoapt-get install openssh-client),如果要使本機(jī)開(kāi)放SSH服務(wù)就需要安裝openssh-server。
一、安裝客戶端
Ubuntu缺省已經(jīng)安裝了ssh client。
sudo apt-get install ssh 或者 sudo apt-get installopenssh-client
ssh-keygen
(按回車(chē)設(shè)置默認(rèn)值)
按缺省生成id_rsa和id_rsa.pub文件,分別是私鑰和公鑰。
說(shuō)明:如果sudo apt-get insall ssh出錯(cuò),無(wú)法安裝可使用sudo apt-get install openssh-client進(jìn)行安裝。
假定服務(wù)器ip為192.168.1.1,ssh服務(wù)的端口號(hào)為22,服務(wù)器上有個(gè)用戶為root;
用ssh登錄服務(wù)器的命令為:
>ssh –p 22 root@192.168.1.1
>輸入root用戶的密碼
二、安裝服務(wù)端
Ubuntu缺省沒(méi)有安裝SSH Server,使用以下命令安裝:
sudo apt-get install openssh-server
然后確認(rèn)sshserver是否啟動(dòng)了:(或用“netstat -tlp”命令)
如果只有ssh-agent那ssh-server還沒(méi)有啟動(dòng),需要/etc/init.d/ssh start,如果看到sshd那說(shuō)明ssh-server已經(jīng)啟動(dòng)了。
如果沒(méi)有則可以這樣啟動(dòng):
sudo/etc/init.d/ssh start
事實(shí)上如果沒(méi)什么特別需求,到這里 OpenSSH Server 就算安裝好了。但是進(jìn)一步設(shè)置一下,可以讓 OpenSSH 登錄時(shí)間更短,并且更加安全。這一切都是通過(guò)修改 openssh 的配置文件 sshd_config 實(shí)現(xiàn)的。
三、SSH配置
ssh-server配置文件位于/etc/ssh/sshd_config,在這里可以定義SSH的服務(wù)端口,默認(rèn)端口是22,你可以自己定義成其他端口號(hào),如222。然后重啟SSH服務(wù):
sudo /etc/init.d/sshresart
通過(guò)修改配置文件/etc/ssh/sshd_config,可以改ssh登錄端口和禁止root登錄。改端口可以防止被端口掃描。
sudo cp/etc/ssh/sshd_config /etc/ssh/sshd_config.original
sudochmod a-w /etc/ssh/sshd_config.original
編輯配置文件:
gedit /etc/ssh/sshd_config
找到#Port 22,去掉注釋?zhuān)薷某梢粋€(gè)五位的端口:Port 22333
找到#PermitRootLogin yes,去掉注釋?zhuān)薷臑椋?code>PermitRootLogin no
配置完成后重起:
sudo/etc/init.d/ssh restart
四、SSH服務(wù)命令
停止服務(wù):sudo /etc/init.d/ssh stop
啟動(dòng)服務(wù):sudo /etc/init.d/ssh start
重啟服務(wù):sudo /etc/init.d/sshresart
斷開(kāi)連接:exit
登錄:sshroot@192.168.0.100
root為192.168.0.100機(jī)器上的用戶,需要輸入密碼。
五、SSH登錄命令
常用格式:ssh [-llogin_name] [-p port] [user@]hostname
更詳細(xì)的可以用ssh -h查看。
舉例
不指定用戶:ssh 192.168.0.1
指定用戶:
ssh -l root 192.168.0.1
ssh root@192.168.0.1
如果修改過(guò)ssh登錄端口的可以:
ssh -p 22333 192.168.0.111
ssh -l root -p 22333 216.230.230.105
ssh -p 22333 root@216.230.230.105
六、提高登錄速度
在遠(yuǎn)程登錄的時(shí)候可能會(huì)發(fā)現(xiàn),在輸入完用戶名后需要等很長(zhǎng)一段時(shí)間才會(huì)提示輸入密碼。其實(shí)這是由于 sshd 需要反查客戶端的 dns 信息導(dǎo)致的。可以通過(guò)禁用這個(gè)特性來(lái)大幅提高登錄的速度。首先,打開(kāi) sshd_config 文件:
sudo nano /etc/ssh/sshd_config
找到 GSSAPI options 這一節(jié),將下面兩行注釋掉:
#GSSAPIAuthentication yes #GSSAPIDelegateCredentials no然后重新啟動(dòng) ssh 服務(wù)即可:
sudo /etc/init.d/ssh restart
再登錄試試,應(yīng)該非??炝税?/p>
七、利用 PuTTy 通過(guò)證書(shū)認(rèn)證登錄服務(wù)器
SSH 服務(wù)中,所有的內(nèi)容都是加密傳輸?shù)?,安全性基本有保證。但是如果能使用證書(shū)認(rèn)證的話,安全性將會(huì)更上一層樓,而且經(jīng)過(guò)一定的設(shè)置,還能實(shí)現(xiàn)證書(shū)認(rèn)證自動(dòng)登錄的效果。
首先修改 sshd_config 文件,開(kāi)啟證書(shū)認(rèn)證選項(xiàng):
RSAAuthentication yes PubkeyAuthentication yesAuthorizedKeysFile %h/.ssh/authorized_keys修改完成后重新啟動(dòng) ssh 服務(wù)。
下一步我們需要為 SSH 用戶建立私鑰和公鑰。首先要登錄到需要建立密鑰的賬戶下,這里注意退出 root 用戶,需要的話用 su 命令切換到其它用戶下。然后運(yùn)行:
這里,我們將生成的 key 存放在默認(rèn)目錄下即可。建立的過(guò)程中會(huì)提示輸入 passphrase,這相當(dāng)于給證書(shū)加個(gè)密碼,也是提高安全性的措施,這樣即使證書(shū)不小心被人拷走也不怕了。當(dāng)然如果這個(gè)留空的話,后面即可實(shí)現(xiàn) PuTTy 通過(guò)證書(shū)認(rèn)證的自動(dòng)登錄。
ssh-keygen 命令會(huì)生成兩個(gè)密鑰,首先我們需要將公鑰改名留在服務(wù)器上:
cd ~/.ssh mv id_rsa.pub authorized_keys
然后將私鑰 id_rsa 從服務(wù)器上復(fù)制出來(lái),并刪除掉服務(wù)器上的 id_rsa 文件。
服務(wù)器上的設(shè)置就做完了,下面的步驟需要在客戶端電腦上來(lái)做。首先,我們需要將 id_rsa 文件轉(zhuǎn)化為 PuTTy 支持的格式。這里我們需要利用 PuTTyGEN 這個(gè)工具:
點(diǎn)擊 PuTTyGen 界面中的 Load 按鈕,選擇 id_rsa 文件,輸入 passphrase(如果有的話),然后再點(diǎn)擊 Save PrivateKey 按鈕,這樣 PuTTy 接受的私鑰就做好了。
打開(kāi) PuTTy,在 Session 中輸入服務(wù)器的 IP 地址,在 Connection->SSH->Auth 下點(diǎn)擊 Browse 按鈕,選擇剛才生成好的私鑰。然后回到 Connection 選項(xiàng),在 Auto-login username 中輸入證書(shū)所屬的用戶名。回到 Session 選項(xiàng)卡,輸入個(gè)名字點(diǎn) Save 保存下這個(gè) Session。點(diǎn)擊底部的 Open 應(yīng)該就可以通過(guò)證書(shū)認(rèn)證登錄到服務(wù)器了。如果有 passphrase 的話,登錄過(guò)程中會(huì)要求輸入 passphrase,否則將會(huì)直接登錄到服務(wù)器上,非常的方便。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。