Welcome to my profile page. I'm a software developer based in P.R.China. I use GitHub to host some of my project and codes, hope they are useful to you as well :)
|
|
💼 Projects | 🧾 服务价格 (China-specific) |
Web SSH & Telnet (WebSSH & WebTelnet client) 🔮
Home Page: https://sshwifty-demo.nirui.org
License: GNU Affero General Public License v3.0
Welcome to my profile page. I'm a software developer based in P.R.China. I use GitHub to host some of my project and codes, hope they are useful to you as well :)
|
|
💼 Projects | 🧾 服务价格 (China-specific) |
Hi,
When I'm going to use a ed25519/ecdsa style private key, sshwifty says "cannot decode private key". isn't their style unsupported?
求助~
是要改一些配置吗~
萌新,不懂........
谢谢大神~
css、js这些资源在nginx反代之后是访问的是绝对路径,虽说nginx的rewrite可以解决,但不熟正则的话得搞个半天
docker 加载配置文件 Private Key 我直接复制粘贴报以下错误
Copyright (C) Rui NI <[email protected]>
https://github.com/niruix/sshwifty
[INF] Wed, 19 Feb 2020 17:59:10 UTC Sshwifty: Initializing
[INF] Wed, 19 Feb 2020 17:59:10 UTC Sshwifty > Configuration > Redundant: Loading configuration from: /sshwifty.conf.json
[WRN] Wed, 19 Feb 2020 17:59:10 UTC Sshwifty > Configuration > Redundant: Unable to load configuration from "File": invalid character '\n' in string literal
[ERR] Wed, 19 Feb 2020 17:59:10 UTC Sshwifty: "Redundant" loader cannot load configuration: All existing redundant loader has failed
[ERR] Wed, 19 Feb 2020 17:59:10 UTC Sshwifty: Unable to start due to error: All existing redundant loader has failed
[INF] Wed, 19 Feb 2020 17:59:10 UTC Sshwifty: Closed
我把 key 的换行全部删掉倒是能启动成功了,但是连接的时候找不到 key 。
Connection failed
ssh: handshake failed: ssh: no key found
Thanks a lot!
Env:Ubuntu 20.04 + Nginx
When try to use reverse proxy to hide the port, all settings can ensure normal operation, but the premise is that you need to access https://domain name:port
,
Loading Sshwifty
will be displayed when port is deleted in the url
反向代理域名+端口时,所有设置能保证正常运行,但前提是需要访问 https://域名:端口
,
删除端口访问时将显示 Loading Sshwifty
此错误很奇怪,按理说平常nginx反代完域名+端口之后直接访问域名就可以,但实际上直接访问域名sshwifty连日志都不会输出。
Nginx 反代配置如下:
location / {
proxy_pass http://域名:端口;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
location /sshwifty/socket {
proxy_pass http://域名:端口;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
Conf中设定HostName为空,TLS证书指定位置正确。
就是去掉端口就无法访问,请帮忙看一下到底是哪里有错误呢?非常感谢了!
很好的项目,赞一个。
我在用的时候,使用私钥加密的ssh登陆方式时,没有找到关于passphrase的选项,就是指定私钥文件以后还需要一个密码,也就导致登陆失败了,请问这是功能上没有添加还是我没有发现呢?
还请指导,很想使用并学习这个项目,谢谢了
When login the server that private key has passphase, the pasge won't ask for passphase but tell you that 'no key found'.
Hi,
I would like to deploy it to my rpi, which uses arm64/v8.
Can it be possible?
Thanks,
Matteo
http error 403:to use a websocket interface ,a valid auth key must be provided.
用了https之后断开连接无法使用,请问怎么解决呢,谢谢
Would it be possible to ask for an auto connect feature, such that if you connect on the web side of things it will automatically open a ssh or telnet preset?
There are 2 ways I can see this working.
Thank you
What if heroku cycling occurs when I use the app?. By the way I ping the app every 5 minutes to prevent dyno sleeping.
Hi Rui,
I am curious if its possible to define Font details like "Size
", "Name
" and "Color
" and background
color
in an environment variable of sort to enable loading PowerLine/Nerd Fonts to support the fancy glyphs..
It would be awesome to change/define these elements as we please.. possible?
Hi, nirui, I updated sshwifty few days ago,
but after that, I found that it alaways says that "Authentication has failed with provided Auth Key",
even though the password is correct.
and this is my nginx config:
`
server
{
listen 80;
listen 443 ssl http2;
underscores_in_headers on;
index index.php index.html index.htm;
root /www/wwwroot/XZB;
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_certificate /www/server/fullchain.pem;
ssl_certificate_key /www/server/privkey.pem;
error_page 497 https://$host$request_uri;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log off;
}
location ^~ /
{
proxy_pass http://127.0.0.1:8080/;
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade $http_upgrade;
}
access_log /dev/null;
error_log /dev/null;
}
`
I love this project! Is there any way to change the default font size? I find it to be too big. Thanks!
私钥信息在第一次读取之后,询问用户是否保存,若保存则存入localStorage,这样可以不用每次都在文件列表里找私钥了..请问能否实现呢?
nirui您好!
刚刚更新了0.2.11,使用的配置文件和0.2.10版本均相同,但是升级之后进入前端界面时一直提示密码错误,后端错误日志如下:
| [WRN] Fri, 30 Apr 2021 11:07:43 CST Sshwifty > Server (127.0.0.1:9858) > Client (127.0.0.1:35918): Request ended with error: /sshwifty/assets/7ff39440b9174e0f8716023d858943b7.svg: HTTP Error (404): Page not found
4|sshwifty | [WRN] Fri, 30 Apr 2021 11:07:43 CST Sshwifty > Server (127.0.0.1:9858) > Client (127.0.0.1:35916): Request ended with error: /sshwifty/socket/verify: HTTP Error (403): To use Websocket interface, a valid Auth Key must be provided
4|sshwifty | [WRN] Fri, 30 Apr 2021 11:08:10 CST Sshwifty > Server (127.0.0.1:9858) > Client (127.0.0.1:35978): Request ended with error: /sshwifty/socket/verify: HTTP Error (403): Authentication has failed with provided Auth Key
When pressing the CTRL+Q button, the key sent is the Q key instead of CTRL+Q, I guess that its because of ctrlKey being false on the keys list:
sshwifty/ui/widgets/screen_console_keys.js
Line 633 in 4bb90f1
很棒的程序,好用还好看。
是否考虑加上简单的文件管理,毕竟图形编辑界面还是比较命令行方便太多了。这样真就做到一站式管理了。
是否考虑自动自签名的ssh,我用来cloudflare中转ipv6的。源站是否s无所谓的。但是程序必须配置证书后才会启动https,如果能够自签名,我想直接cloudflare就能绕开importKey那个错误
当然这俩都无关紧要,上来写这个就是感谢一下
希望能有个[可选择项]将历史连接过的主机信息保存在云端而非cookie
就个人使用而言的话,这样相对会更方便一些,并且安全性也不会有过大的损失。
Examples:
ptt.cc
uses CP950.
bbs.ustc.edu.cn
uses CP936.
Love the app - is there a way to remove the hostname validation?
I proxy some of my ssh traffic and require a hostname of user@targethost@proxyhost - how can I disable hostname checking?
Thanks!
This is fantastic! I was looking for this!! 😄
Japanese Telnet BBS (using Shift_JIS) can be connected using sshwifty:
But sshwifty can now freely select the connection destination. This can be abused.
I want to limit the connections or show the list. (For example, I want to display Japanese Telnet BBS list)
Or want to restrict to one connection destination.
Can you add it to sshwifty?
RT,点+创建SSH或telnet后,提示Unable to connect to the Sshwifty backend server: WebSocket Error (1006)
Hi!
I have some trouble with the transfer of the configuration file to the container, container can't find my config, I'am doing something wrong in the path I think. Not sure, but I also has trying with envars, and after deploy, I can't login with my preset sharedkey. Could you point out a mistake?
Here is my stack:
version: '2.1'
services:
sshwifty:
image: niruix/sshwifty:latest
container_name: sshwifty
hostname: sshwifty
environment:
- TZ=Europe/Kiev
- SSHWIFTY_CONFIG=/etc/sshwifty/sshwifty.conf.json
volumes:
- /mnt/docker_storage/sshwifty/sshwifty.conf.json:/etc/sshwifty/sshwifty.conf.json
ports:
- 8182:8182
restart: unless-stopped
Hello,
Great project, thanks a lot for sharing!
Is there a typo in the word "passphrase"? Is it called "passpharse" on purpose?
Thanks,
Loric
Hello There,
I would like to seek your advise on how to setup sshwifty behind a Reverse Proxy.. I am using Ngnix as a proxy and when i try to proxy the sshwifty app at location / - everything works.
location / {
proxy_pass http://172.17.0.3:8182;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
But when I move the config to be served under path /sshclient, then loading of manifest.json
and css
files seem to be broken
location /sshclient/ {
proxy_pass http://172.17.0.3:8182;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
Attempting to access the url/sshclient results in "× Server was unable to complete the request"
Modifying the config to
location /sshclient/ {
rewrite ^/sshclient(.*) $1 break;
proxy_ignore_client_abort on;
proxy_pass http://172.17.0.3:8182;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
with above change and i browse to http://uri/sshclient i see following
Loading Sshwifty
Client is currently being loaded. Should only take a few seconds, please wait
Copyright © 2019 Rui NI <[email protected]>
Source code Readme License
When i attempted to debug using chrome developer tools, i notice the following
GET http://localhost/manifest.json 404 (Not Found)
GET http://localhost/6218340eaf037830067c.css net::ERR_ABORTED 404 (Not Found)
While i am not an expert at web developer or belong to a developer profile, i suspect that this is an issue with static files that are failing to be served..
Any advise?
It will be nice to have, to able to pass arguments by url like following example which opens the session directly within a new browsertab without any prompter:
http://localhost:8022/?hostname=xx&username=yy&password=string_base64_encoded
BR
Max
Hi, I dont know if Im doing this the right way. I want to use custom config file using docker, but getting permission denied loading the config file. Here is the detail:
$ docker run --detach
--restart always
--publish 8182:8182
--name sshwifty
--env SSHWIFTY_CONFIG=/root/sshwifty.conf.json
niruix/sshwifty:latest
$ docker logs sshwifty
Sshwifty Web SSH Client
Copyright (C) Rui NI [email protected]
https://github.com/nirui/sshwifty
[INF] Mon, 22 Mar 2021 23:16:45 UTC Sshwifty: Initializing
[INF] Mon, 22 Mar 2021 23:16:45 UTC Sshwifty > Configuration > Redundant: Loading configuration from: /root/sshwifty.conf.json
[WRN] Mon, 22 Mar 2021 23:16:45 UTC Sshwifty > Configuration > Redundant: Unable to load configuration from "File": open /root/sshwifty.conf.json: permission denied
[ERR] Mon, 22 Mar 2021 23:16:45 UTC Sshwifty: "Redundant" loader cannot load configuration: All existing redundant loader has failed
[ERR] Mon, 22 Mar 2021 23:16:45 UTC Sshwifty: Unable to start due to error: All existing redundant loader has failed
[INF] Mon, 22 Mar 2021 23:16:45 UTC Sshwifty: Closed
$ cat /root/sshwifty.conf.json
{
"HostName": "Sshwifty",
"SharedKey": "MyPASSWORD",
"DialTimeout": 5,
"Socks5": "",
"Socks5User": "",
"Socks5Password": "",
"Servers": [
{
"ListenInterface": "0.0.0.0",
"ListenPort": 8182,
"InitialTimeout": 3,
"ReadTimeout": 60,
"WriteTimeout": 60,
"HeartbeatTimeout": 20,
"ReadDelay": 10,
"WriteDelay": 10,
"TLSCertificateFile": "",
"TLSCertificateKeyFile": ""
}
],
"Presets": [
{
"Title": "Host 1",
"Type": "SSH",
"Host": "10.0.1.1",
"Meta": {
"User": "root",
"Encoding": "utf-8",
"Private Key": "file:///root/.ssh/id_rsa",
"Authentication": "Private Key",
"Fingerprint": "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKkpxaqwcXw03ELQ5Pg4Sa0uBiqwefEJEKmh1XNhQT8UQW9Xn5+mplPpTlsJGQ+zLni+r8+FMN4FOrtW0D9ryBFw="
}
}
],
"OnlyAllowPresetRemotes": false
}
What am I doing wrong?
If I have a deployment that I expect people from the Pacific coast to access a server on the eastern coast, the readme states that it'll fail.
Is there any way to fix this? I'm honestly getting sick of using Guacamole.
是否可以在配置文件中添加一个新选项【"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,作者这个是我最喜欢的了,希望能做得更好~~
Hi, it's great!
When i run npm run build
or npm run dev
, there is a error - go: github.com/gorilla/[email protected]: Get "https://proxy.golang.org/github.com/gorilla/websocket/@v/v1.4.2.mod" : connect: timeout or network is unreachble
.
Because of GFW in China, i use proxychain. But yet to OK.
Thank you for your replay.
I have already compile the source code on my local computer, but failed on npm run build
It when well when running command npm run generate.
Then i push to heroku using git push heroku master, i got this error
cannot load github.com/niruix/sshwifty/application/controller/static_pages: cannot find module providing package github.com/niruix/sshwifty/application/controller/static_pages
Can you give me the heads up on how to deploy on heroku.com?
搜索bash log的功能,打印一大堆的时候,能搜索一下就更好了
My BBS buddies tried sshwifty and found this.
He did not use GitHub, so I issued an issue on my behalf.
When you select Telnet or SSH from sshwifty in Microsoft Edge,
the following screen appears and you cannot use it:
サイトからのメッセージ = Message from site
In addition, when using Internet Explorer, it stops at the boot screen,
but I think that this need not be considered.
But Edge support will need to be considered for Windows users.
It would be nice, if we can pre define SSH host keys to the Preset in sshwifty.conf.json
I have added the following to sshwifty.conf.json
, These are Japanese Telnet / ssh BBS:
:
"Presets": [
{
"Title": "Fusen no heya (balloon.tel)",
"Type": "Telnet",
"Host": "balloon.tel:55123",
"Meta": {
"Encoding": "shift-jis"
}
},
{
"Title": "Fusen no heya (fusen.ddns.net)",
"Type": "Telnet",
"Host": "fusen.ddns.net:55123",
"Meta": {
"Encoding": "shift-jis"
}
},
{
"Title": "Seiwa net",
"Type": "Telnet",
"Host": "jp3tlc.no-ip.biz",
"Meta": {
"Encoding": "shift-jis"
}
},
{
"Title": "Virus net",
"Type": "Telnet",
"Host": "211.133.151.119",
"Meta": {
"Encoding": "shift-jis"
}
},
{
"Title": "WhiteWing",
"Type": "Telnet",
"Host": "bbs.whitewing.gr.jp",
"Meta": {
"Encoding": "shift-jis"
}
},
{
"Title": "Communitex",
"Type": "Telnet",
"Host": "www.maruo.co.jp",
"Meta": {
"Encoding": "shift-jis"
}
},
{
"Title": "Hanzou BBS (Telnet)",
"Type": "Telnet",
"Host": "ktbbs.hanzou.jp:11123",
"Meta": {
"Encoding": "shift-jis"
}
},
{
"Title": "Hanzou BBS (ssh)",
"Type": "Telnet",
"Host": "ktbbs.hanzou.jp:11111",
"Meta": {
"Encoding": "shift-jis",
"User": "bbs",
"Authentication": "bbs"
}
},
{
"Title": "FENIX (shift-jis)",
"Type": "Telnet",
"Host": "akari.fenix.ne.jp",
"Meta": {
"Encoding": "shift-jis"
}
},
{
"Title": "Wappy nets (wapiko.ddo.jp)",
"Type": "Telnet",
"Host": "wapiko.ddo.jp",
"Meta": {
"Encoding": "shift-jis"
}
},
{
"Title": "Wappy nets (wapiko.jp)",
"Type": "Telnet",
"Host": "wapiko.jp",
"Meta": {
"Encoding": "shift-jis"
}
}
],
"OnlyAllowPresetRemotes": true
As a result, I can only connect my own BBS (Fusen no heya, balloon.tel = fusen.ddns.net),
which seems to connect only locally.
You are using a lot of
len(x) <= 0
but why are you not using
len(x) == 0
?
复制与粘贴能不能再绑定 Ctrl Insert 复制,Shift Insert 粘贴,这个快捷键比较通用。
现在复制可以使用,但是粘贴不起作用。
我在 chrome 86 上测试,使用 Ctrl Shift V 粘贴,它只是回显了命令,但是不能执行。
尊敬的nirui您好,
之前使用docker部署的sshwifty,nginx反代能够隐藏端口正常访问,版本是0.2.8-beta-release,后来使用二进制部署出现了 #40 的问题
目前docker镜像已经3个月没有更新,是否还有docker更新计划呢?还是说放弃docker了呢?
现在预设好了还是要点四步才能连接,能否跟最近连接一样点击即连接?
还有配置文件的私钥能不能使用文件路径配置,如
"Private Key": "/id_rsa_nopass"
十几个服务器配置文件拉的老长,全都是私钥内容。
或者使用环境变量预先配置,如
-e PrivateKey1="-----BEGIN RSA PRIV...\nMIIE...\n-----END RSA PRI...\n"
然后配置文件直接
"Private Key": "PrivateKey1"
私钥其实没几个,大多服务器都是用的同一个私钥,现在配置文件大多都是重复内容。
Is there a way to have sshwifty remember the private key for a SSH connection?
Currently, it appears I need to re-enter my Private RSA Key every single time I want to connect to a specific host. Kind of a pain.
Thanks.
都是使用 ip 连的,多了之后经常不知道哪个是哪个。
Can it be made a config option to remove the red statement saying "An insecured service may steal your secrets. Always exam the safety of the service before using it."?
It's very distracting and unpleasing to the eye.
thanks
Hi,
Thank you so much for this beautiful implementation.. Great Work.
After trying the Heroku URL, i wanted to build this project on my system and hence I cloned the project and used the available Dockerfile (No changes to any files) and issued docker build -t ssh .
at the root of the project.
The build seemed to be successful, however launching the container using
docker run --detach \
--restart=always \
--publish 8182:8182 \
--name sshwifty \
ssh
aa9d179b9a95180d4c9d4822b7b7e4ef8b01eb50e75c2a3e3427fd4e27504d6e
When I browse to IP:8182 , i could see the FrontEnd page available, however when I navigate to + > SSH (or) Telnet, i receive a browser pop up as indicated below
Unable to connect to the Sshwifty backend server: TypeError: Cannot read property 'importKey' of undefined
You see any wrong doing on my actions? Kindly advise if this can fixed/corrected.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.