前一篇随笔我们将了 Linux 怎么安装部署 Wetty 服务,但是我们看到,在浏览器中输入 http://127.0.0.1:3000 进行访问的时候,还需要我们输入账号密码进行认证(如下图第一行所示)。
但在某些应用场景下,我们不需要用户输入账号密码进行认证,而且用户也不一定知道账号密码。我们希望用户打开即可直接进行命令操作。
在命令行终端中输入 node app.js 会如下提示,其中列出了启动 wetty 服务的所有选项说明。
从上图的这些选项中看到 wetty 是通过 ssh 来进行终端操作的,而其中的 --sshauth 用于指定 ssh 的认证模式,其默认为 password ,表示通过账号密码方式进行认证。关于 ssh 和 ssh 的认证模式我们可以参考下面几个文档。
( 1 )阮一峰的博文: SSH 原理与运用(一):远程登录 ;
( 2 ) https://en.wikipedia.org/wiki/Secure_Shell
( 3 ) Linux / Unix Command: ssh
( 4 ) Linux / Unix Command: ssh_config
Ssh 的认证方式有很四种: hostbased、publickey、keyboard-interactive、password。其中 password 即我们上面说的账号密码认证方式; publickey 是 RSA 公钥认证方式;其它两个我们暂时不关心。
Wetty 默认采用的是 password 认证方式,我们可以通过 --sshauth 选项指定为 publickey 认证方式即可。关于 ssh 公钥的认证机制是:
用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
那么我们需要先打开一个命令行终端,然后输入
$ ssh-keygen 来生成我们的公钥和私钥。
该命令生成的公钥和密钥默认都保存在 ~/.ssh 目录下,
其中 id_rsa 文件中保存的是私钥, id_rsa.pub 文件中保存的是公钥。
上面 ssh 公钥认证机制提供我们需要讲公钥保存到远程机器中, 保存在登录后的用户主目录的~/.ssh/authorized_keys 文件中。公钥就是一段字符串,只要把它追加在 authorized_keys 文件的末尾就行了。 而此时我们的远程机器即是本地机器,于是我们只需要将 ~/.ssh/id_rsa.pub 复制一份并命名为 authorized_keys 即可。
$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
然后我们切换到 wetty 目录下,启动 wetty 服务,
$ node app.js -p 3000 --sshauth=publickey
然后在浏览器中输入http://127.0.0.1:3000/,可以看到此时不需要输入账号密码即可直接操作,如下图所示,
如果我们嫌每次启动的时候还要指定 --sshauth 选项太麻烦的话,我们可以直接修改 app.js 文件中源代码。打开 app.js 文件,我们可以看到其在第 45 行指定的 sshauth 的默认认证方式为 password ,我们只需要将其修改为 publickey 即可。
(done)