-
Notifications
You must be signed in to change notification settings - Fork 362
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
是否可以在配置文件中添加一个新选项【"baseURL"】,用于控制访问的URL? #36
Comments
关于主要的问题:抱歉,这无法实现。因为事实上Sshwifty的前端程序是在编译时生成的,其中包括路径(即 建议如果有可能的话,你可以通过子域名的方式(如 就与预设相关的问题:按照目前的设计,预设其实仅仅是自动填表功能,并且会保存 Session 信息(指本身只会在当前页面有效,页面刷新后失效的数据,其中包括登录密码之类的敏感信息。这些信息在通过正常向导连接时则不会被保存)。在用户通过Preset向导连接过一次之后,“Connected before”列表中会出现之前的连接记录,用户只需要通过点击这些记录就能进行自动连接了,不需要再使用Preset。因此,“Connected before”连接记录的存在其实是有意义的。 就“New remote”这个Tab在当 就快捷键相关的问题:关于遮挡的问题,你可以试试在不使用快捷键栏(其实叫Toolbar)的时候关闭它;关于可配置的快捷键,我会思考如何去实现这一功能(实现这项功能需要改动一些架构,没有看起来那么简单),不过我在忙于其他的项目,在那些项目完成之前大概不会有时间去做这些。 我猜测你是在手机上使用Sshwifty因此遇到了这样的问题。如果是这样的话,最好的办法是连接一个实体键盘,这样就不需要使用Sshwifty内置的快捷键了。 关于公网部署安全性的问题:Sshwifty的Websocket数据包其实是用AES加密的(但是没有Replay保护,因此你仍然需要HTTPS)。你在Sshwifty的登录页面输入的密码会在之后作为加密密钥的一部分来加密数据载荷,如果Sshwifty后端无法通过正确的密钥解密数据包,它会断开连接。也就是说,不知道正确登录密码的人是无法连接Sshwifty后端Websocket接口的,也因此就无法命令Sshwifty后端去执行任何操作。 当然如果你不放心的话,可以用Nginx加一层HTTP Auth,这样可以避免任何未授权的人访问Sshwifty的任何部分。 不过,最后还是抱歉啦,您最主要的要求没有目前办法达成 :( |
感谢你的回复,虽然明确了不能通过增加"BaseURL"的方式去定义二级路径,实现反向代理,你确实感谢你提供可能的解决方案。之所以想到使用二级路径作NGINX的匹配反代,是因为我在使用动态域名服务和花生壳的内网穿透去连接家里的服务器,基于花生壳的内网穿透原理,我这个情况下没有办法通过自定义DNS解释的"A"记录去作匹配;而如果使用阿里云的域名解释服务,又没办法使用默认的80和443端口[再加路由器上的端口影射实现];所以才会提出是否可以增加"BaseURL"的想法。 对于“Connected before”,应该是我说得不够清晰,我的意思并不是完全的移除这个页面,而是建议以单独的页面去做这件事;毕竟当我看到这些“已经连接过的服务”,突然的出现在预设连接“PRESETS”的页面上时,我感觉到严重的打乱了原来预设连接页面的美观性;对于预设连接页面的“Connected before”功能的实现,我是建议了以另外的展示方式去实现这个功能/目的,见前面第三点内容; 对于快捷键,这只是我的一个设想而且,毕竟让你去实现这个我感觉对于一个开源工具来说,有点过份了。我已经想到了要实现这项功能的复杂性;显然不会是一个按钮关联一个命令那么简单,例如不同预设连接对应不同的命令版本[这个个人感觉要做的话,将命令与按键绑定设定在JSON配置文件内比较合适];在UI方面要怎么向用户清晰的传达在使用的按键等; 关于安全性的问题,经过你的解释,我大概了解他的安全程度了。说实话,那个密码认证框是我最喜欢这个WEBSHH的其中一点,大部分的WEBSSH都没有这个功能。以目前的安全措施来说,局域网使用,已经完全足够了!但如果说要暴露于公网使用的话,这个安全措施显然远远不够!单密码认证的方式,连最基本的暴力破解也不足以抵挡。当然,我可以利用NGINX或APACHE的“HTTP Auth”增加一层防护,但显然我不想用那个丑陋的“HTTP Auth”去遮挡那个原本漂亮的界面。其实基于“连接预设”这一个功能,这已经和一个通常的SHELL终端没多少区别了,在这一个情况下,如果用户设置了“预设连接”并暴露于公网,一但密码被爆破成功,这将意味着用户丢失了所有“预设连接”服务器的控制权了,这显然是一个极大的安全问题!那如果暴露于公网,但不设定“预设连接”,密码被爆破,那安全吗?显然也不是,虽然没有了丢失服务器控制权的风险,但这个WEBSSH依然可以作为网络攻击中,其中代理跳板的其中一环,用于隐藏网络攻击者的攻击途径。显然基于单密码认证方式下,本工具在公网使用个人认为风险还是比较高。 所以说,如果作者你本来的希望是将其暴露于公网使用[我感觉你是这个想法],首先要处理的可能是安全认证的问题。对于安全性加强的方法,我有以下几个想法。1、增加验证码功能[拖动验证也可考虑],当然这个验证码功能是可以关闭的,因为内网使用的话,这个只会增加操作的复杂性;这基本是公网防暴力破解的最基本的方法了;2、增加一个“USER”配置项,这个配置项的值其实没什么实质性的意义,他可以是任意字符组合,但两个文本框的输入可以大大增加暴力破解的难度;另外,这一配置项也可以配合实现第3点想法的功能实现;3、增加锁定功能,即用户连接输入错误密码X次,锁定X分钟;以上这些增加安全性的功能,可以通过配置项一次性屏蔽,毕竟内网使用的话,当前的设定已经足够了。 当然,我这些想法其实和现在网站使用的防爆破手段基本一样,所以也不算是想法; 以上这些只不过是我一些想法,毕竟我的确比较喜欢你这个项目。我只会搭服务,不写代码,所以我也帮不上什么忙[主要是我不想写代码,那个太苦逼了;而且有你们这些人在,我还折腾什么代码~~]。我不是摧你更新啊,毕竟我知道这种东西都只是基于兴趣在做 |
如果你是购买了花生壳内网映射服务的话,那么看来只能用我上面提供的那个比较Hack的二级目录方案了。不过需要注意的是,由于Sshwifty的特性,用户的数据,包括“Connected Before”中的内容是存储在客户浏览器的 至于“Connected Before”和“Preset”方面,其实我的设计是让Preset只需要执行一次,然后用户只需通过“Connected Before”上的记录进行后续连接就可以了,这样一来还可以免去重新运行连接向导的麻烦。所以这两个列表才出现在一个页面上——因为需要提供一个方便的界面让用户去发现这些连接记录。 另外,Preset的目的并不是为了提供一个终端列表,而是允许管理员设置一些主机的连接选项以便让用户去方便的连接(#14)。如果你有安全方面的考虑,则不应该使用Preset,也不要把机密信息放在Preset里,因为这些数据是会以明文方式发送给客户端的,包括密钥和密码。你可以看一下 README.md#configuration-file 里关于Preset的警告。 另:你不需要在Preset里设置所有的选项(Meta Field)。当一个Field不存在时,用户可以在连接向导里自定义其中的值。 就你的用例来说,最好的方式还是在连接完想要连接的SSH主机后,将“Connected Before”的记录导出到文件里,并将这个文件分享给到其他需要使用Sshwifty的客户端。这样配合Nginx的HTTP Auth,可以避免未授权的访问和数据泄露。你可以在“Known remotes”面板的最下面找到Import/Export的功能。 |
啊,抱歉。我在提供完那个Issue里的 你试试将上面配置里的 如果还不行的话我可能需要进一步测试 |
我这边已经修改了 Issue 10#issuecomment-562925134 中的 |
恩,我现在在使用"/sshwifty"作为二级路径,对比了一下你最新的更新连接,和原来相比应该就是删除了"="号;关于"upstream"我自己的配置中没有使用,这个应该不影响,毕竟这个也没有需要做负载均衡/备份服务器的需要。 我有点时间,又测试了了一下"import/export"的功能;我突然发现这个功能非常好,你应该把这个功能做成一个更明显的按键;测试中,当“"OnlyAllowPresetRemotes": true”时,当通过"import"导入的主机不在预设配置中时,连接会被拒绝,这应该是符合你的预期设计的。但我个人觉得,可以开放这一个限制,理由见下: 对于一个可以暴露于公网使用的服务来说,我一直都是非常关注安全性的,所以一直在想怎样可以将这一个服务暴露于公网,而又能保证安全,"import"这一个功能我突然发现可以通过一些合理的设定,实现暴露于公网使用的安全上的需要;暴露于公网使用,我个人认为“"OnlyAllowPresetRemotes": true”是必须的,这能防止服务成为代理跳板。然后通过"import"功能导入预设配置进行SSH连接,那用户便能随时使用SSHWIFTY进行服务器管理了,而对于用户来说,用户只需要一个U盘保存这些文件,或在手机上保存这些文件,便能随时随地的使用SSHWIFY了。 当然,对一个开源工具来说,任务人都可以通过阅读代码,自行生成对应的配置文件以使用SSHWIFTY;所以,这些配置文件需要进行加密处理,在"config.json"增加一个字段,指定任意的字符串,用于加解密这些"import"文件;通过这样的方式,不同用户生成的"import"文件就不再一样了,也就是不同用户无法使用非他们搭建的SSHWIFTY了,这样安全性的问题就解决了。 通过这样的方式,暴露于公网的SSHWIFTY,指定“"OnlyAllowPresetRemotes": true”,并且也不需要进行连接预设,而是仅需要保存一份只有自己知道加解密符串的"import"文件,即可在任意地方管理自己的服务器了,也不存在安全问题了~~ |
如果你想限制一个公共Sshwifty实例的访问能力,可以:
Sshwifty的连接记录(即“Connected Before”中的数据)是保存在客户端的,Import/Export也是纯客户端的,因此对这些数据进行加密其实并没有什么意义了。 |
OnlyAllowPresetRemotes的意思是“仅允许连接Preset中定义的远程主机”。如果你不设定任何Preset同时将OnlyAllowPresetRemotes设定成true的话,Sshwifty就不会允许任何连接了。
以下均在我假设的SSHWIFTY的最基本认证,即"SharedKey"被暴力破解后的前提下[无任何限制措施的单文本框认证我个人认为基本对暴力破解没良好的防御能力,若提高密码的复杂程序,我感觉又提高了这个工具的易用性]; 设定OnlyAllowPresetRemotes为true,定义好所有的Preset,但不要提供登陆凭据(比如密码或密钥)。这样用户在使用那些Preset的时候需要手动输入登陆凭据才可以连接。
让Sshwifty后端通过一个能够进行访问控制的Socks5代理进行连接,你可以通过Socks5系列设置来让Sshwifty去使用指定的Socks5代理。
通过iptables去限制Sshwifty后端的Outgoing。
Sshwifty的连接记录(即“Connected Before”中的数据)是保存在客户端的,Import/Export也是纯客户端的,因此对这些数据进行加密其实并没有什么意义了。
当然,这只是我一厢情愿的想法~~~我只是说一下我的想法,作者你有自己的想法,项目也是你的,你应该按你的想法去设计这个工具,我只是一个参考~~~ |
不是的,当你删除了那些Preset之后,Sshwifty将不再会允许用户连接到那些远程主机,哪怕Sshwifty客户端本地仍然有"Connected Before"的记录。 |
你说的我都知道啊,看来我还是没说清楚我的意思, 现在SSHWIFTY公网使用存在以下问题【建立在基本认证被暴力破解后】 |
如果你是想阻止未经授权的访问,那么可以通过在Nginx上设定HTTP Auth并配合fail2ban之类的程序来实现。有什么原因使你认为此项功能无法通过其他程序或方式达成,因而必须添加进Sshwifty?(除了你之前提到的不美观之外) |
嗯~我并没有说配合其它工具不能实现,但如果工具本身就有能力可以满足,那为什么需要依赖于第三方提供安全? 我之前测试只是简单的测试,也没发现"Preset"原来是可以不设定密码这类参数的,所以我一直以为预设必须填写完整的服务器资料;另一方面我想问一下,"Preset"既然可以不填写预设密码,那么是不是也可以不填写一些其它的参数?例如用户?以另一个方式来问,或者是,OnlyAllowPresetRemotes状态设定为"true"时,"Preset"中的那一个参数决定了,此“预设连接”是否可以成功连接至目标服务器? ================= 如你所说,"Preset"可以不设定密码这类参数的【我已经测试了,的确可以】,那通过SSH的公钥登录,已经满足安全需要了。在这个设定我,我基本了解你的安全设计方式。应该就是:
================= 在这个方式下,我想问一下,是否可以提供一个选项,以控制"Preset"的预设连接是否在前端中显示? ================= 最后问一下,已经连接过的目标服务器可以通过"export"导出,而作为另一主机上的"import文件",此文件如果结合你的代码,逆向解释出当中的服务器地址/端口/密码/私钥的可能性存在吗? |
一些功能并没有你想的那么简单,比如你上面提到的通过增加一个字段来提高破解难度,其实你把密码设置的长一点结果是一样的。如果你仍然不放心,可以去用Nginx的HTTP Auth,并调试它的相关选项来增强安全性。此外,你说去加密导出的连接记录,这也是没有意义的,因为Sshwifty是在客户端处理那些记录的。 第三方工具往往提供了更强大的管理功能,这些功能往往经过了多年的优化,利用这些工具去实现你想要的功能显然比让我去民科一个更合适。 最后,你要知道这是一个开源并且免费的程序,所以我在维护的时候主要考虑的不是添加功能,而是保持维护的低成本。注意:这也是你能免费使用这个软件,而不需要每月向我支付¥45使用费的原因。
你可以不填写 我之后会将相关说明明确的写在
Sshwifty将连接记录分为两个部分,一部分是“常规信息”,其中包含了远程服务器的地址和端口,以及连接相关的其他选项,这部分信息是在导出的文件当中的;还有一部分被称为“Session信息”,本意是“仅仅在当前的页面可用,页面关闭(Session消失)后丢失”。“Session信息”中保存了密钥等机密信息。“Session信息”的储存和导出是特殊的:
你可以在打开Sshwifty客户端页面的浏览器窗口按F12键然后使用控制台命令 另外,导出的数据并没有加密,你可以通过在浏览器控制台使用 |
你给出一个非常了不得的功能函数!!!于是我又基于这个功能函数做了一些测试! 当然,以上这一切应该在你的预期之内; 另一方面,我也测试了在存在" 关于45元/月,有点贵了吧,单位是月啊~~~~而且我也给你做测试啊,也提供建议,就免费了吧,哈哈~~~ |
这是因为你在使用0.2.7-beta,这样的行为已经在36#issuecomment-751567251中说明清楚了。在下一个版本中,在Preset连接过程中由用户输入的密码/密钥不会被保存,这项变更已经在两天前由 bf1fd7c 实现了。 |
Hi,你好,新版本 然而你的其他提议由于各种考虑没有被接受,抱歉。 |
是否可以在配置文件中添加一个新选项【"baseURL"】,用于控制访问的URL?
如果不是很明白我说的意思,FileBrowser的项目中有此配置项。
例如:当【"baseURL": "/ssh"】时,可以通过“http://www.example.com/ssh/...”访问 SshWifty ;
这会很有用,比如当使用NGINX作反向代理时;
另外有一些美化建议;
1、增加一个选项,用于决定是否显示警告信息;
2、当“"OnlyAllowPresetRemotes": true”时,隐藏“New remote”页面;
3、“Known remotes”页面中移除“CONNECTED BEFORE”,预设连接“PRESETS”的状态以更简洁方式显示;
比如说,在预设框下增加状态栏,“CONNECTED”绿色:表示已连接过并连接成功,直接“CONNECTED”点击即可重新连接;“UNREACHABLE”红色:表示曾经尝试连接但连接失败,这个情况可以重新点击预设选项尝试重新连接。如果从未进行过连接,则无色;如果希望显示更多信息则增加信息栏,比如用户与IP/域名,或最后连接日期;
4、“CONNECTED BEFORE”页面应该以一个单独的页面显示;并且这个页面应该依据“OnlyAllowPresetRemotes”的设定来决定是否显示;
其它:
在连接成功后,点击SSH的连接栏,会显示一些快捷键,这些快捷键会遮挡SSH的页面;可能的话,如果这些快捷键可以通过配置文件来自定义一些命令,那样会更实用更。
另外,问一下,直接暴露于公网使用的话,使用密码认证后,安全性如何?
上面大部分的内容都是多余的,我比较关注的是,是否可以通过增加额外的配置项,来控制访问的URL;找了很多个WEBSHH,作者这个是我最喜欢的了,希望能做得更好~~
The text was updated successfully, but these errors were encountered: