GoTTY 是一个简单的基于 Go 语言的命令行工具,它可以将你的终端(TTY)作为 web 程序共享。它会将命令行工具转换为 web 程序。希望对大家有帮助。 |
它使用 Chrome OS 的终端仿真器(hterm)来在 Web 浏览器上执行基于 JavaScript 的终端。重要的是,GoTTY 运行了一个 Web 套接字服务器,它基本上是将 TTY 的输出传输给客户端,并从客户端接收输入(即允许客户端的输入),并将其转发给 TTY。
它的架构(hterm + web socket 的想法)灵感来自 Wetty项目,它使终端能够通过 HTTP 和 HTTPS 使用。
先决条件你需要在 Linux 中安装GoLang(Go编程语言)环境来运行 GoTTY。
如何在 Linux 中安装 GoTTY如果你已经有一个可以工作的 Go 语言环境,运行下面的 go get命令来安装它:
# go get github.com/yudai/gotty
上面的命令会在你的GOBIN环境变量中安装 GOTTY 的二进制,尝试检查下是否如此:
# $GOPATH/bin/
要运行它,你可以使用 GOBIN 环境变量并用命令补全:
# $GOBIN/gotty
另外,要不带完整命令路径运行 GoTTY 或其他 Go 程序,使用export命令将GOBIN变量添加到~/.profile文件中的PATH环境变量中。
export PATH="$PATH:$GOBIN"
保存文件并关闭。接着运行source来使更改生效:
# source ~/.profile
运行 GoTTY 命令的常规语法是:
Usage: gotty [options] []
现在用 GoTTY 运行任意命令,如df 来从 Web 浏览器中查看系统分区空间及使用率。
# gotty df -h
GoTTY 默认会在 8080 启动一个 Web 服务器。在浏览器中打开 URL:http://127.0.0.1:8080/,你会看到运行的命令仿佛运行在终端中一样:
你可以在~/.gotty 配置文件中修改默认选项以及终端,如果该文件存在,它会在每次启动时加载这个文件。
这是由 getty 命令读取的主要自定义文件,因此,按如下方式创建:
# touch ~/.gotty
并为配置选项设置你自己的有效值以自定义 GoTTY,例如:
// Listen at port 9000 by default port = "9000" // Enable TSL/SSL by default enable_tls = true // hterm preferences // Smaller font and a little bit bluer background color preferences { font_size = 5, background_color = "rgb(16, 16, 32)" }
你可以使用命令行中的--html选项设置你自己的index.html文件:
# gotty --index /path/to/index.html uptime
由于 GoTTY 默认不提供可靠的安全保障,你需要手动使用下面说明的某些安全功能。
允许客户端在终端中输入命令请注意,默认情况下,GoTTY 不允许客户端输入到TTY中,它只支持窗口缩放。
但是,你可以使用-w或--permit-write选项来允许客户端写入 TTY,但是并不推荐这么做因为会有安全威胁。
以下命令会使用 vi 命令行编辑器在 Web 浏览器中打开文件fossmint.txt进行编辑:
# gotty -w vi fossmint.txt
以下是从 Web 浏览器看到的 vi 界面(像平常一样使用 vi 命令):
尝试激活基本身份验证机制,这样客户端将需要输入指定的用户名和密码才能连接到 GoTTY 服务器。
以下命令使用-c选项限制客户端访问,以向用户询问指定的凭据(用户名:test 密码:@67890):
# gotty -w -p "9000" -c "test@67890" glances
限制访问服务器的另一种方法是使用-r 选项。GoTTY 会生成一个随机 URL,这样只有知道该 URL 的用户才可以访问该服务器。
还可以使用 -title-format "GoTTY – {{ .Command }} ({{ .Hostname }})"选项来定义浏览器标题。glances 用于显示系统监控统计信息:
# gotty -r --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances
以下是从浏览器中看到的上面的命令的结果:
因为默认情况下服务器和客户端之间的所有连接都不加密,当你通过 GoTTY 发送秘密信息(如用户凭据或任何其他信息)时,你需要使用-t或--tls选项才能在会话中启用 TLS/SSL:
默认情况下,GoTTY 会读取证书文件~/.gotty.crt 和密钥文件~/.gotty.key,因此,首先使用下面的openssl命令创建一个自签名的证书以及密钥( 回答问题以生成证书和密钥文件):
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/.gotty.key -out ~/.gotty.crt
按如下所示,通过启用 SSL/TLS,以安全方式使用 GoTTY:
# gotty -tr --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances
你可以使用终端复用程序来与多个客户端共享一个进程,以下命令会启动一个名为 gotty 的新 tmux 会话来运行 glances(确保你安装了 tmux):
# gotty tmux new -A -s gotty glances
要读取不同的配置文件,像下面那样使用–config "/path/to/file"选项:
# gotty -tr --config "~/gotty_new_config" --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances
要显示 GoTTY 版本,运行命令:
# gotty -v
访问 GoTTY GitHub 仓库以查找更多使用示例:http://github.com/yudai/gotty 。
就这样了!你有尝试过了吗?如何知道 GoTTY 的?通过下面的反馈栏与我们分享你的想法。
作者简介:
Aaron Kili 是 Linux 和 F.O.S.S 爱好者,即将成为 Linux SysAdmin 和网络开发人员,目前是 TecMint 的内容创作者,他喜欢在电脑上工作,并坚信分享知识。
via: http://www.tecmint.com/gotty-share-linux-terminal-in-web-browser/
作者:Aaron Kili 译者:geekpi 校对:wxy
原文来自:http://linux.cn/article-8445-1.html
本文地址:http://www.linuxprobe.com/gotty-linux.html
本文来自博客园,作者:linux_pro,转载请注明原文链接:http://www.cnblogs.com/linuxpro/p/17422221.html
大家好,又见面了,我是你们的朋友全栈君。官方链接如下: https://cwiki.apache.org/confluence/display/WW/Security+Bulletins 最近,不出意外Struts2又双叒叕一次被爆出RCE漏洞【S2-061Struts远程代码执行漏洞(CVE-2020-17530)】 每次Struts2RCE漏洞爆发的时候都在想,如果有个地方能统一看一下Struts2的历史漏洞就好了,网上搜索了下居然没有,翻了下Struts2官网,终于找到了需要的内容截至本文发布时,所以已经爆出的Struts2漏洞如下S2-001—Remotecodeexploitonformvalidationerror S2-002—Crosssitescripting(XSS)vulnerabilityon<s:url>and<s:a>tags S2-003—XWorkParameterInterceptorsbypassallowsOGNLstatementexecution S2-004—Directorytraversalvulnerabilit
LAMP-- LinuxApacheMySQLPHP在CentOS安装的顺序,我一般是Apache->MySQL->PHP第一步、安装并配置Apache1、使用yum安装yuminstallhttpd2、修改防火墙配置,打开80端口,可以顺便把MySQL的3306端口也打开vi/etc/sysconfig/iptables添加两条记录-AINPUT-mstate--stateNEW-mtcp-ptcp--dport80-jACCEPT-AINPUT-mstate--stateNEW-mtcp-ptcp--dport3306-jACCEPT注意添加位置,如下图3、关闭SELINUXvi/etc/selinux/configvi/etc/selinux/config修改SELINUX=disabled4、Apache配置文件vi/etc/httpd/conf/httpd.conf找到ServerName,设置为自己的域名,如果没有域名,可以设置为localhost:805、开机自动启动Apachechkconfighttpdon6、重启Apacheservicehttpdres
python的字符串内建函数字符串方法是从python1.6到2.0慢慢加进来的——它们也被加到了Jython中。这些方法实现了string模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对Unicode的支持,有一些甚至是专门用于Unicode的。方法描述string.capitalize()把字符串的第一个字符大写string.center(width)返回一个原字符串居中,并使用空格填充至长度width的新字符串string.count(str,beg=0,end=len(string))返回str在string里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数string.decode(encoding='UTF-8',errors='strict')以encoding指定的编码格式解码string,如果出错默认报一个ValueError的异常,除非errors指定的是'ignore'或者'replace'string.encode(encodin
Android省市区选择三级联动效果,一个不大不小的功能,就算你做过,但是没有相关的代码直接写,也要花掉你至少半天时间。下面我写出我的实现过程(思路绝对清晰)。先上效果图一、准备数据我是用的本地的json数据(走网络的话太慢,每次都要请求),放在asserts中。格式如下:[{ "name":"河北省", "city":[ { "name":"石家庄市", "area":[ "长安区", "桥东区", "桥西区", "新华区", "郊区", "井陉矿区", "井陉县", "正定县", "栾城县", "行唐县", "灵寿县", "高邑县", "深泽县", "赞皇县", "无极县&quo
对短视频平台直播来说,它受到的问题和直播平台的问题是相同的,在视频直播的码率、分辨率、帧率等问题上,都会受到各种因素的影响,具体的内容如下。1、短视频直播源码码率(bitrate)码率即比特率,指单位时间内产生的数据位,单位bps(bitpersecond),1Mbps=1024kbps=1048576bps。一般的,分辨率一定的情况下,码率越高,视频质量越好。(*注意bps与B/s的区别,1B/s=8bps。)通常,720P的码流码率在2~4Mbps左右,1080P的码流码率在4~8Mbps左右,对于用户来说则是宽带要求,要看720P的视频需要至少2M的带宽,要看1080P的视频需要至少4M的带宽,当前国内的网络环境下,上下行速率不对等,如果主播要使用高清视频,还得确保主播上行带宽足够。编码方式有两种,一种叫定码率CBR,指按照固定的码率来进行编码,一种叫变码率VBR,指依照实际数据量大小变化的码率来进行编码。2、分辨率(resolution)短视频直播源码分辨率指的是画面的尺寸大小,分辨率越高,图像越大。一般的,在码率一定的情况下,分辨率越高,视频质量越差。分辨率有图像分辨率与显示
前言我的京东价格监控网站需要不间断爬取京东商品页面,爬虫模块我采用了Scrapy+selenium+HeadlessChrome的方式进行商品信息的采集。由于最近爬虫用的服务器到期,需要换到新服务器重新部署,所以干脆把整个模块封装入Docker,以便后续能够方便快速的进行爬虫的部署。同时,由于我的Scrapy整合了redis,能够支持分布式爬取,Docker化后也更方便进行分布式的拓展。任务需求将爬虫代码打包为Docker镜像在全新的服务器上安装Docker使用单独的Redis容器作为爬取url队列(也就是Scrapy-redis中redis的主要用处)所有新开的爬虫容器连接Redis容器步骤打包爬虫代码Scrapy内置的crawler不支持页面渲染的方式进行页面渲染,需要使用scrapy-splash或者selenium作为中间件,才能够支持页面渲染爬取。我在代码中整合了selenium,并在系统中安装了chrome,这在docker中,需要在打包时将chrome安装至镜像中。Dockerfile文件中,将chrome下载并安装至镜像,并且将chromedriver放入系统,保证se
Dart语法【Dart中文】可以说是Google因为为Flutter量身定做的一门语言,所以,我们之前基本上都没有接触过这门语言,在入手Flutter坑的时候,还必须了解一下Dart的语言特性。 Dart官网【Dart中文】上面已经有了很详细的说明,我这里只是见多的说说,提取一些重点,以便自己复习以及你们学习。v main 每一个.Dart文件都会有一个mian()函数,这个称之为程序的入口文件,这就像是前端ES6语法中的export一样,都要有一个输出。其实,Dart的设计就有一点遵循前端的ES6语法,不过他还结合了一些c语言 //程序的入口文件 main(){ /*或者用这种注释*/ //main函数输出了一点东西,print控制台输出 print('我是main函数,我是程序执行的入口'); }复制 代码都可以在DartPad上面运行,你也可以自行修改代码,不过不可能需要开着V**才可以访问这个网站。 Dart关键字 关键字的意思就不用多说了,注意上图中的关键字,在变量命名的时候不要使用就行了。 重要的概念(重要) 在Dart中,所有的能够使用变量引用的都是对
新智元编译来源:Wired翻译:小潘【新智元导读】今年3月,谷歌推出了一款名为Bristlecone的芯片,称它是第一个可以超越任何传统计算机的计算能力的量子计算系统,它将会成为“量子霸权”的标志,而谷歌将在今年达到“量子霸权”。不过,阿里巴巴量子实验室最近的新结果表明,谷歌的这一计划过于乐观。谷歌的量子计算研究人员一直在计划一个派对,但来自中国阿里巴巴的竞争团队的新结果可能导致这个派对的推迟。通过中美公司在这个晦涩的物理边界上的竞争表明,国家之间以及企业之间的竞争越来越激烈,它们希望创造一种新型的难以想象的强大电脑。 今年3月,谷歌推出了一款名为Bristlecone的芯片,旨在成为计算的一个里程碑。谷歌称,它是第一个可以超越任何传统计算机的计算能力的量子计算系统,它将会成为“量子霸权”的标志。该组织的领导人约翰·马丁尼斯(JohnMartinis)表示,将在今年达到“量子霸权”,更新了此前说2017年达到的预测。但阿里巴巴量子研究人员获得的新结果表明,谷歌公布的Bristlecone计划无法实现量子霸权。他们认为,这个目标的实现需要更低错误率的芯片。在一封电子邮件中,谷歌研究员Se
结巴分词的过程: jieba分词的python代码结巴分词的准备工作 开发者首先根据大量的人民日报训练了得到了字典库、和Hmm中的转移概率矩阵和混淆矩阵。 1.加载字典,生成trie树 为什么要加载字典树呢,是因为如果没有字典树,那么扫描将会是一个庞大的工程,有了字典树就可以在该分支上扫描。例如扫描“中国人民银行”(正向最大匹配)先扫描6个字的字典库,找到了“中国人民银行”,然后再去掉一个字变成了“中国人民银”,假如没有字典树的话,就会把所有五个字的字典库搜索一遍。但是现在就不会了,只要把“中国人民”和“中国人民银行”之间的节点搜索一遍就行了,大大的节省了时间。有句话叫以空间换时间,最适合用来表达这个意思。 2.给定待分词的句子,使用正则获取连续的中文字符和英文字符,切分成短语列表,对每个短语使用DAG(查字典)和动态规划,得到最大概率路径,对DAG中那些没有在字典中查到的字,组合成一个新的片段短语,使用HMM模型进行分词,也就是作者说的识别新词,即识别字典外的新词. 本人理解:先进行扫描分词,然后切成很多的句子,每个句子再利用动态规划找出最大概率路径(消除歧义)。 (1)关于有向无环
Google刚刚开源了grpc, 一个基于HTTP2和Protobuf的高性能、开源、通用的RPC框架。Protobuf本身虽然提供了RPC 的定义语法,但是一直以来,Google只开源了Protobuf序列化反序列化的代码,而没有开源RPC的实现,于是存在着众多良莠不齐的第三方RPC实现,不过我在项目中采用WCF搭配Protobuf是一个很不错的RPC实现,Google这个框架是是基于HTTP2的,这是他有特色的地方,带来诸如双向流、流控、头部压缩、单TCP连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。从实现和特性看来,grpc更多的是考虑移动场景情况下客户端和服务端的通信,正如其自称的「generalRPCframeworkthatputsmobileandHTTP/2first」。HTTP2本身提供了连接多路复用、Body和Header压缩等机制,grpc基于此可以提供比较高效的实现。目前Firefox、Chrome、Safari、Opera、iOS版Safari、Android版Chrome、Windows8上的IE11都已经支持HTTP/
建表规范: 1.InnoDB禁止使用外键约束 2.存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE 3.整型定义中无需定义显示宽度,直接使用INT,而不是INT(10) 4.建议字段定义为NOTNULL 命名规范: 1.库、表、字段全部使用小写; 2.库名、表名、字段名建议不超过12个字符(库名、表名、字段名支持最多64个字符,但为了统一规范、易于辨识以及减少传输量,统一不超过12个字符) 3.库名、表名、字段名见名知意,不需要添加注释 索引规范 1.索引命名规则:idx_col1_col2[_colN]、uniq_col1_col2[_colN],字段过长建议采用缩写 2.索引中的字段数建议不超过5个 3.单张表的索引个数控制在5个以内 4.建立复合索引时,优先将选择性高的字段放在前面 5.不建议使用%前缀模糊查询,无法用到索引,会导致全表扫描 6.避免在索引字段上使用函数,否则会导致查询时索引失效
1.priority_queue<pair<int,int>>时,是按照first为第一关键字从大到小排序,second为第二关键字,从大到小排序。 2.p=lower_bound(a+1,a+n+1,a[i])-a是和a[i]相等的编号最小的编号. 3.bfs的一个非常有用的性质便是:分层。即会把这张图有序化。 4.最短路图的建立 5.\(\frac{1}{32}\timesn^3\)可过(bitset优化 6.Floyd可以处理含有负权边的情况,如果含有负环,则存在i使得\(F_{i,i}<0\) 7.\(\sum_{i=1}^ni^2=\frac{n*(n+1)*(2n+1)}{6}\) 8.不知道在哪看的不等式\((1+p)^n>=1+n*p\) 9.关于线段树的双标记下放,举个例子:乘法标记和加法标记,如果先下放乘法标记再下放加法标记,就要考虑前者对后者产生的影响。 10.数据范围1e6直接考虑\(nlogn\)就行了。 11.设\(nxt_i\)表示i右边第一个比他大的位置。关于nxt有一个性质,即随机序列的情况下,\(nxt_i-i\)
运行js文件 在使用nodejs文件之前先确定本机电脑安装node是否成功,在运行命令中进行查看,代码是node-v。启动运行命令win+r门出入cmd,然后在命令窗口中输入node-v,如果在命令窗口中显示node的版本号表示安装成功 在运行nodejs文件的时候可以使用绝对路径也可以使用相对路径,无论使用什么方式都要保证能够找到文件 在使用相对路径的时候一般是“./”、“../”、直接编写文件名称 在使用绝对路径的时候: 在window系统下是盘符进行开头 在非window系统下是以“根(/)”进行开头 全局变量 global:全局变量的宿主(类似于浏览器js中的window对象),这是一个特殊的对象,称为全局对象(GlobalObject),它及其所有属性都可以在程序的任何地方访问 __filename:当前正在执行的脚本的文件名(完整/绝对路径) __dirname:当前执行脚本所在的目录路径(目录的绝对路径) console.log(global);//全局变量的宿主 console.log(__filename);//当
ES6-Set()集合 Set()的介绍属性及方法 ES6提供了新的数据结构Set(集合)。它类似于数组,但成员的值都是唯一的,集合实现了iterator接口,所以可以使用『扩展运算符』和『for…of…』进行遍历,集合的属性和方法: size返回集合的元素个数 add增加一个新元素,返回当前集合 delete删除元素,返回boolean值 has检测集合中是否包含某个元素,返回boolean值 clear清空集合,返回undefined 1.可以利用Set()成员值的唯一性实现数组去重 //声明一个Set() lets=newSet(); lets2=newSet(['李白','典韦','露娜','李白']); console.log(s2);//Set(3) {'李白','典韦','露娜'} 复制 2.返回集合元素的个数 lets=newSet(); lets2=newSet(['李白','典韦','露娜','李白']); console.log(s2.size);//3注意:返回的是去重之后的个数 复制 3.添加一个新元素 lets2=newSet(['李白','典
MySql数据库设计规范 1、数据库命名规范 -采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; -命名简洁明确(长度不能超过30个字符); -例如:galaxy,life也可以galaxy_bak,life_log给数据库加个后缀; -除非是备份数据库可以加0-9自然数:galaxy_db_20170504; 复制 2、数据库表命名规范 -采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; -命名简洁明确,多个单词用下划线'_'分隔; -例如:galaxy_user,galaxy_repinggu,galaxy_rehead,目前官网以为历史原因统一前缀了galaxy_,最好能通过前缀来反应表之间的关系,如user_profile,user_role等等 复制 3、数据库表字段命名规范 -采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; -命名简洁明确,多个单词用下划线'_'分隔; -例如:user_login表字段user_id,user_name,pass_word,eami
下载地址:http://ueditor.baidu.com/website/download.html 建议同时下载所需版本及完整源码。 [1.4.3JSP+完整源码src] 简单配置说明 解压JSP版,放置项目中。 1,引入所需文件; <@scripttype="text/javascript"src="${page.url.context}/res/components/ueditor/ueditor.config.js"></@script> <@scripttype="text/javascript"src="${page.url.context}/res/components/ueditor/ueditor.all.js"></@script> <@scripttype="text/javascript"src="${page.url.context}/res/components/ueditor/lang/zh-cn/zh-cn.js"></@scrip