開始之前
前文:
超詳盡教程!在Windows 10內(nèi)置Ubuntu子系統(tǒng)上搭建私有云
(續(xù)):超詳盡教程!在Windows 10內(nèi)置Ubuntu子系統(tǒng)上搭建私有云,講解了怎樣在Windows 10上開辟WSL子系統(tǒng)并搭建私有云盤,大家反響還不錯,點(diǎn)擊已經(jīng)過千。這一篇繼續(xù)給這個小系統(tǒng)添加功能,今天的主題是:安裝SSH服務(wù),實(shí)現(xiàn)遠(yuǎn)程終端連接。
給Ubuntu安裝SSH服務(wù)
第一步,打開Ubuntu命令行窗口,切換到root用戶,安裝tasksel程序并執(zhí)行:
# apt install tasksel -y
# tasksel
出現(xiàn)下面這個紫色的小窗口:
在列表底部空格鍵選擇OpenSSH server(注意先用空格取消默認(rèn)的幾個選擇),Tab鍵把光標(biāo)切到OK按鈕上,回車,等待自動安裝結(jié)束,重新回到命令行,SSH服務(wù)器就裝好了。
看著很簡單,試著啟動一下就出錯了(囧)。
# /etc/init.d/ssh start
* Starting OpenBSD Secure Shell server sshd
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
不過這個難不倒人,簡書上就有大神給出了解決方案,這是因?yàn)樾掳娴膐pensshd 中添加了ed25519 做簽名驗(yàn)證,而之前系統(tǒng)里沒這個算法的證書。生成一下再次啟動,這次就OK了。
# ssh-keygen -A
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
# /etc/init.d/ssh start
* Starting OpenBSD Secure Shell server sshd [ OK ]
Windows 10安裝PuTTy客戶端工具
PuTTy 是最有名的 SSH 和 telnet 客戶端,最初由 Simon Tatham 為 Windows 平臺開發(fā)。非常易于安裝和使用,通常大部分的配置選項(xiàng)你都不需要修改。只需要輸入少量基本的參數(shù),就可以開始很簡單地建立連接會話。
另找一臺局域網(wǎng)內(nèi)的電腦(下稱電腦B),作為客戶端遠(yuǎn)程連接裝有Ubuntu的電腦(下稱電腦A),在電腦B上點(diǎn)此下載 PuTTy最新版(0.71)。根據(jù)你的操作系統(tǒng)選擇64位或32位版本安裝即可,我選64位版本。安裝之后,電腦B的開始菜單里多了這么幾個東東:
點(diǎn)擊Putty圖標(biāo),打開PuTTy Configuration窗口,在Hostname里輸入電腦A的IP地址,點(diǎn)擊Open按鈕進(jìn)行試連接:
結(jié)果被踢回來了:
這才想起電腦A的22端口沒打開,當(dāng)然拒絕訪問了。在(續(xù)):超詳盡教程!在Windows 10內(nèi)置Ubuntu子系統(tǒng)上搭建私有云一文中,我詳細(xì)寫了Windows 10的端口開放方法,只不過上次是開放8080端口,這次是22端口,方法完全一樣,這里不再詳述,只需進(jìn)入電腦A的控制面板->系統(tǒng)和安全->Windows Defender防火墻->高級設(shè)置,點(diǎn)擊“入站規(guī)則->新建規(guī)則”,開放22端口,重啟電腦A。
再次從電腦B用PuTTy連接電腦A,這次還是被踢回來,只不過錯誤原因變了:
配置SSH連接秘鑰
Linux就是這樣,軟件安裝沒什么難度,但配置起來頭疼事一堆。對我這樣的小白非常不友好。之所以出現(xiàn)publickey錯誤,是因?yàn)樾掳娴腟SH-2默認(rèn)使用秘鑰認(rèn)證登陸,也就是說,需要鑰匙才行,密碼已經(jīng)落后了。
回到電腦A的Ubuntu命令行窗口,用vi打開SSH服務(wù)的配置文件:
# vi /etc/ssh/sshd_config
里面有這么一句:
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
意思是,缺省設(shè)置禁止明文密碼登陸。將這句改成:
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
保存文件,重啟ssh服務(wù):
# /etc/init.d/ssh restart
* Restarting OpenBSD Secure Shell server sshd [ OK ]
再次用PuTTy連接,這次成功了:
login as: niuyoucai
niuyoucai@localhost's password:
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.4.0-17134-Microsoft x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
1 package can be updated.
0 updates are security updates.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
不過,明文密碼太low了吧,怎么也得試試秘鑰登陸是不是?再次編輯ssh配置文件,做下面幾個改動:
# vi /etc/ssh/sshd_config
PasswordAuthentication yes -> PasswordAuthentication no
#PubkeyAuthentication yes -> PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 -> AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
保存退出,用ssh-keygen生成rsa秘鑰,并設(shè)置passphrase也就是秘鑰的密碼,成功后出現(xiàn)下面信息:
# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:LfobOqio9U0yxq/Y8z9BBAh7XuiUD6VyveTGlOc4Ggs root@MATEBOOK-D
The key's randomart image is:
+---[RSA 2048]----+
| .. .o. |
| ..* .. |
| o O *.. |
| B O =.. |
| E + O.S . |
| o = o.. |
| . B.o .. |
| o =o*.o.. |
|+ o.++=o+o |
+----[SHA256]-----+
這樣就生成了一個/root/.ssh目錄,下面有兩個秘鑰文件:
#ls ~/.ssh
id_rsa id_rsa.pub
id_rsa是私鑰,id_rsa.pub是公鑰,這倆總是成對出現(xiàn)。照我的粗淺理解,公鑰和私鑰就像鑰匙和鎖的關(guān)系,公鑰是鎖,私鑰則是鑰匙。下面把私鑰文件拷貝到Windows目錄里:
# cp ~/.ssh/id_rsa /mnt/c/temp/
重啟ssh服務(wù):
# /etc/init.d/ssh restart
* Restarting OpenBSD Secure Shell server sshd [ OK ]
然后去電腦A的C:\temp目錄里找到這個文件,拷貝到電腦B(客戶端)的任意目錄里備用。
回到電腦B,打開PuTTYgen,點(diǎn)擊Load,選擇剛剛拷貝過來的id_rsa文件,提示輸入passphrase,也就是剛才生成秘鑰時設(shè)定的秘鑰的密碼:
成功之后是這樣:
點(diǎn)擊Save private key按鈕,保存一個id_rsa.ppk文件,名字可以任取,但擴(kuò)展必須是ppk,這個操作的目的,是將ssh server生成的私鑰加工成PuTTy自己的私鑰格式文件,如果原封不動地用服務(wù)器生成那個,死活登陸不上去,我在這里卡殼兒了很久,差點(diǎn)放棄。這個文件就是今后客戶端免密登陸ssh服務(wù)器的鑰匙了,一定要保存好,隨身攜帶吧。
再次回到電腦A,在Ubuntu命令行窗口做最后的ssh服務(wù)器配置:
# cd ~/.ssh
# cp id_rsa.pub authorized_keys
# chmod 600 authorized_keys
# /etc/init.d/ssh restart
這樣做的目的是將公鑰文件內(nèi)容放到authorized_keys文件里,因?yàn)樗借€驗(yàn)證只認(rèn)這個名字的公鑰文件,最后重啟ssh服務(wù)。
回到客戶端電腦B,打開PuTTy,進(jìn)行連接,先輸入電腦A的IP:
再點(diǎn)擊Data設(shè)置默認(rèn)登陸用戶:
然后點(diǎn)擊SSH->Auth,點(diǎn)擊Browse選擇剛才用PuTTy生成的id_rsa.ppk私鑰文件:
最后別忘了回到Session,給這一套配置起個名字,點(diǎn)擊Save保存一下,我保存成wsl,以后登陸直接雙擊wsl即可。
然后點(diǎn)擊Open,終端窗口出現(xiàn)了,敲入Passphrase(秘鑰的密碼)之后,成功以root用戶身份遠(yuǎn)程登陸Ubuntu!
看到那個綠色的小光標(biāo),有種相當(dāng)開心的感覺。
后記
至此,我的Ubuntu子系統(tǒng)增加了遠(yuǎn)程客戶端登陸功能。用秘鑰方式訪問SSH非常安全,即使別人知道你的root密碼,沒有鑰匙,也無法登陸你的linux,這就是SSH-2拋棄密碼登陸方式的原因。如果想從外網(wǎng)登陸電腦A的Ubuntu,只需要在路由器設(shè)置一個22端口的映射即可,詳細(xì)方法在(續(xù)):超詳盡教程!在Windows 10內(nèi)置Ubuntu子系統(tǒng)上搭建私有云一文中有講解,不再贅述。這樣你在外面的時候,可以通過路由器的Wan IP登陸電腦A上的這個小小linux系統(tǒng),是不是很酷呢?天氣越來越熱了,我也開啟宅男模式,躲在家里各種折騰,越研究越有意思,生活在于折騰,文章寫的辛苦,望各位多多點(diǎn)贊,謝了!