继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务

开始之前

前文:
超详尽教程!在Windows 10内置Ubuntu子系统上搭建私有云
(续):超详尽教程!在Windows 10内置Ubuntu子系统上搭建私有云,讲解了怎样在Windows 10上开辟WSL子系统并搭建私有云盘,大家反响还不错,点击已经过千。这一篇继续给这个小系统添加功能,今天的主题是:安装SSH服务,实现远程终端连接。

给Ubuntu安装SSH服务

第一步,打开Ubuntu命令行窗口,切换到root用户,安装tasksel程序并执行:

# apt install tasksel -y
# tasksel

出现下面这个紫色的小窗口:


继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第1张图片
tasksel运行窗口

在列表底部空格键选择OpenSSH server(注意先用空格取消默认的几个选择),Tab键把光标切到OK按钮上,回车,等待自动安装结束,重新回到命令行,SSH服务器就装好了。
看着很简单,试着启动一下就出错了(囧)。

# /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

不过这个难不倒人,上就有大神给出了解决方案,这是因为新版的opensshd 中添加了ed25519 做签名验证,而之前系统里没这个算法的证书。生成一下再次启动,这次就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 平台开发。非常易于安装和使用,通常大部分的配置选项你都不需要修改。只需要输入少量基本的参数,就可以开始很简单地建立连接会话。
另找一台局域网内的电脑(下称电脑B),作为客户端远程连接装有Ubuntu的电脑(下称电脑A),在电脑B上点此下载 PuTTy最新版(0.71)。根据你的操作系统选择64位或32位版本安装即可,我选64位版本。安装之后,电脑B的开始菜单里多了这么几个东东:

继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第2张图片
PuTTy

点击Putty图标,打开PuTTy Configuration窗口,在Hostname里输入电脑A的IP地址,点击Open按钮进行试连接:
继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第3张图片
PuTTy登陆窗口

结果被踢回来了:
继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第4张图片
端口被拒绝

这才想起电脑A的22端口没打开,当然拒绝访问了。在 (续):超详尽教程!在Windows 10内置Ubuntu子系统上搭建私有云一文中,我详细写了Windows 10的端口开放方法,只不过上次是开放8080端口,这次是22端口,方法完全一样,这里不再详述,只需进入电脑A的控制面板->系统和安全->Windows Defender防火墙->高级设置,点击“入站规则->新建规则”,开放22端口,重启电脑A。
再次从电脑B用PuTTy连接电脑A,这次还是被踢回来,只不过错误原因变了:
继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第5张图片
pubulickey有问题

配置SSH连接秘钥

Linux就是这样,软件安装没什么难度,但配置起来头疼事一堆。对我这样的小白非常不友好。之所以出现publickey错误,是因为新版的SSH-2默认使用秘钥认证登陆,也就是说,需要钥匙才行,密码已经落后了。
回到电脑A的Ubuntu命令行窗口,用vi打开SSH服务的配置文件:

# vi /etc/ssh/sshd_config

里面有这么一句:

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no

意思是,缺省设置禁止明文密码登陆。将这句改成:

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes

保存文件,重启ssh服务:

# /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秘钥,并设置passphrase也就是秘钥的密码,成功后出现下面信息:

#  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是公钥,这俩总是成对出现。照我的粗浅理解,公钥和私钥就像钥匙和锁的关系,公钥是锁,私钥则是钥匙。下面把私钥文件拷贝到Windows目录里:

# cp ~/.ssh/id_rsa /mnt/c/temp/

重启ssh服务:

# /etc/init.d/ssh restart
 * Restarting OpenBSD Secure Shell server sshd                   [ OK ]

然后去电脑A的C:\temp目录里找到这个文件,拷贝到电脑B(客户端)的任意目录里备用。

回到电脑B,打开PuTTYgen,点击Load,选择刚刚拷贝过来的id_rsa文件,提示输入passphrase,也就是刚才生成秘钥时设定的秘钥的密码:


继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第6张图片
Load私钥

成功之后是这样:


继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第7张图片
Save private key

点击Save private key按钮,保存一个id_rsa.ppk文件,名字可以任取,但扩展必须是ppk,这个操作的目的,是将ssh server生成的私钥加工成PuTTy自己的私钥格式文件,如果原封不动地用服务器生成那个,死活登陆不上去,我在这里卡壳儿了很久,差点放弃。这个文件就是今后客户端免密登陆ssh服务器的钥匙了,一定要保存好,随身携带吧。

再次回到电脑A,在Ubuntu命令行窗口做最后的ssh服务器配置:

# cd ~/.ssh
# cp id_rsa.pub authorized_keys
# chmod 600 authorized_keys
# /etc/init.d/ssh restart

这样做的目的是将公钥文件内容放到authorized_keys文件里,因为私钥验证只认这个名字的公钥文件,最后重启ssh服务。

回到客户端电脑B,打开PuTTy,进行连接,先输入电脑A的IP:


继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第8张图片
输入IP

再点击Data设置默认登陆用户:


继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第9张图片
默认用户

然后点击SSH->Auth,点击Browse选择刚才用PuTTy生成的id_rsa.ppk私钥文件:
继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第10张图片
选择PuTTy私钥

最后别忘了回到Session,给这一套配置起个名字,点击Save保存一下,我保存成wsl,以后登陆直接双击wsl即可。


继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第11张图片
保存配置

然后点击Open,终端窗口出现了,敲入Passphrase(秘钥的密码)之后,成功以root用户身份远程登陆Ubuntu!
继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务_第12张图片
登陆成功!

看到那个绿色的小光标,有种相当开心的感觉。

后记

至此,我的Ubuntu子系统增加了远程客户端登陆功能。用秘钥方式访问SSH非常安全,即使别人知道你的root密码,没有钥匙,也无法登陆你的linux,这就是SSH-2抛弃密码登陆方式的原因。如果想从外网登陆电脑A的Ubuntu,只需要在路由器设置一个22端口的映射即可,详细方法在(续):超详尽教程!在Windows 10内置Ubuntu子系统上搭建私有云一文中有讲解,不再赘述。这样你在外面的时候,可以通过路由器的Wan IP登陆电脑A上的这个小小linux系统,是不是很酷呢?天气越来越热了,我也开启宅男模式,躲在家里各种折腾,越研究越有意思,生活在于折腾,文章写的辛苦,望各位多多点赞,谢了!

你可能感兴趣的:(继续折腾!给Windows 10内置Ubuntu子系统安装SSH服务)