Linux下设置wetty不需要登录可进行命令行操作

Linux系统下wetty安装和使用说明

1. Wetty简介

Wetty是使用Node.js和websockets开发的一个开源Web-based SSH。关于Web-based SSH的更多资料请参考https://en.wikipedia.org/wiki/Web-based_SSH。

而wetty的资料请参考https://github.com/krishnasrinivas/wetty。

2. 环境准备

因为wetty是使用Node.js编写的,所以我们要事先安装好相关的Node.js环境。

3. Wetty安装

运行下面命令进行安装,

 $ git clone https://github.com/krishnasrinivas/wetty
 $ cd wetty
 $ sudo npm install

安装过程可能会出错,请参考下面的可能问题处理。

4. 验证

安装完成之后,然后运行下面命令启动wetty服务,监听3000端口号,

$ node app.js -p 3000

然后打开浏览器,输入http://127.0.0.1:3000,然后输入密码登陆成功后便可以进行命令行操作了,效果如下图所示,

5. 可能问题处理

5.1安装时报error: 'Use' is not a member of 'node::Buffer'

因为我安装的Node是4.1.1版本的,太新了。而wetty原本依赖的pty.js太老,导致编译出现的问题。修改以下wetty源代码目录下的package.json,将依赖的pty.js修改成最新版本0.3.0(原本是^0.2.7-1)。保存文件,然后重新运行sudo npm install命令即可。

 
5.2 ssh访问失败

启动wetty服务后,在浏览器中输入http://127.0.0.1:3000时报一个类似于下面截图的”ssh: connect to host localhost port 22: Connection refused”的错误。

运行以下下面的命令重新安装openssl-client和openssl-server即可,

$ sudo apt-get remove openssh-client openssh-server
$ sudo apt-get installopenssh-client openssh-server

设置wetty不需要账号登录便可进行命令行操作

上面我们学习了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即可。

时间: 2024-09-30 15:08:16

Linux下设置wetty不需要登录可进行命令行操作的相关文章

自己写的一个java程序,怎么在linux下设置成用户登录后启动?

问题描述 自己写的一个java程序,怎么在linux下设置成用户登录后启动? 我自己目前的办法是自己写了一个脚本,内容是:#!/bin/bashcd /ablationjava -jar newablation130222_fat.jar &然后在桌面终端下vi ~/.bash_profile 按i在文档的最后加入sh /ablation/auto.sh按esc然后按:w 回车键 但是这个办法不是很好,我希望通过纯代码实现,或者写一个脚本让java调用这个脚本在实现,请问各位该怎么办啊

Linux下设置日期和时间的一些步骤

以下内容是关于帮助你在Linux下设置日期和时间的一些步骤,也包含了一点ntpd时间同步的内容.特别提醒的是在发行版本的限制是red hat系列,包括fedora,centos,redflag,unbreakable linux等. There are two clocks to configure in Linux, the hardware clock and the system clock. The hardware clock determines the system clock o

Linux下设置防火墙白名单(RHEL 6和CentOS 7)的步骤_Linux

进入Linux 命令行,编辑防火墙规则配置文件 iptables vi /etc/sysconfig/iptables 下面是一个白名单设置的例子: # Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTP

linux下怎么解压.tar.gz .tar.bz2命令_linux shell

从网络上下载到的源码包, 最常见的是 .tar.gz 包, 还有一部分是 .tar.bz2包 要解压很简单 : .tar.gz     格式解压命令为          tar   -zxvpf   xx.tar.gz .tar.bz2   格式解压命令为          tar   -jxvpf    xx.tar.bz2 //p参数可以保留原文件权限(很重要) 以上所述是小编给大家介绍的linux下怎么解压.tar.gz .tar.bz2命令,希望对大家有所帮助,如果大家有任何疑问欢迎给我

浅谈Linux下tar,jar压缩,解压的常用命令_Linux

如下所示: tar cvf /data/d2/apps.tar apps cd /data01/applsrm/SRM tar xvf apps.tar jar cvf /data01/xxx.jar * cd wq jar xvf xxxx.jar 以上这篇浅谈Linux下tar,jar压缩,解压的常用命令就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持. 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮

Linux下设置定期执行脚本

  在Linux下,经常需要定期的执行一些脚本从而来实现一些功能. 在Linux下我们用crontab来实现定期的执行脚本这个功能,下面就介绍一下crontab的使用.以及我遇到的一些问题 一. crontab的使用说明 1. crond 是linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动此任务调度命令.crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作.而linux任务调度的工作主要分为以下两类 a. 系统执行的工作,比如垃圾清理,备份

Linux应用笔记:Linux下设置和查看环境变量

Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1 永久的:需要修改配置文件,变量永久生效. 2 临时的:使用export命令声明即可,变量在关闭shell时失效. 设置变量的三种方法 1 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是"永久的". 例如:编辑/etc/profile文件,添加CLASSPATH变量 # vi /etc/pro

linux下lftp连接ftp服务器上传下载命令

  linux下lftp连接ftp服务器上传&下载 Java代码 用法: lftp ftp://用户名:密码@IP > 下载目录 mirror DIRNAME [下载整个目录里包含子目录,推荐此命令] 上传目录 mirror -R DIRNAM 下载目录 ... 用法: lftp ftp://用户名:密码@IP > 下载目录 mirror DIRNAME [下载整个目录里包含子目录,推荐此命令] 上传目录 mirror -R DIRNAM 下载目录 方法一 > mget -d D

Linux 有问必答:如何在桌面版 Ubuntu 中用命令行更改系统代理设置

问题: 我经常需要在桌面版 Ubuntu 中更改系统代理设置,但我不想通过繁琐的 GUI 菜单点击:"系统设置" -> "网络" -> "网络代理".在命令行中有更方便的方法更改桌面版的代理设置吗? 在桌面版 Ubuntu 中,它的桌面环境设置,包括系统代理设置,都存储在 DConf 数据库,这是简单的键值对存储.如果你想通过系统设置菜单修改桌面属性,更改会持久保存在后端的 DConf 数据库.在 Ubuntu 中更改 DConf 数