导
就不扯一堆优点啥的了,因为也真没感觉有多大用处,就是好玩~
安装
官方提供有准备好的容器镜像,可以直接使用docker根据官方镜像创建一个sshwifty服务(都2021年了不会还有人不会用docker吧)
# 官方配置文件例子,默认不用修改,如果有定制化需求可以手动更改并使用"-v 选项"挂载到容器中
# "SharedKey"是首次进入web的密码,如果开启了TSL好像不用输入了
# "ListenInterface"是监听地址
# "ListenPort"是监听端口
cat sshwifty.conf.example.json
{
"HostName": "",
"SharedKey": "WEB_ACCESS_PASSWORD",
"DialTimeout": 5,
"Socks5": "",
"Socks5User": "",
"Socks5Password": "",
"Servers": [
{
"ListenInterface": "127.0.0.1",
"ListenPort": 8182,
"InitialTimeout": 3,
"ReadTimeout": 60,
"WriteTimeout": 60,
"HeartbeatTimeout": 20,
"ReadDelay": 10,
"WriteDelay": 10,
"TLSCertificateFile": "",
"TLSCertificateKeyFile": ""
}
]
}
# 生成 sshwifty 内部使用的TLS证书文件
openssl req \
-newkey rsa:4096 -nodes -keyout domain.key -x509 -days 90 -out domain.crt
# 运行sshwifty容器,如果有定制化需求,将更改的配置文件重命名为sshwifty.conf.json
# 并挂载到容器中以下任一地址即可
# "/home/sshwifty/.config/sshwifty.conf.json", "/etc/sshwifty.conf.json", "/sshwifty.conf.json"
docker run --detach \
--restart always \
--publish 8182:8182 \
--env SSHWIFTY_DOCKER_TLSCERT="$(cat domain.crt)" \
--env SSHWIFTY_DOCKER_TLSCERTKEY="$(cat domain.key)" \
--name sshwifty \
niruix/sshwifty:latest
使用nginx反向代理并使用ssl域名解析
准备好域名,解析到对应服务器或者负载均衡上,我这里直接解析到后端服务器了,然后在后端机器上的nginx创建该域名的配置文件,如下所示:
sudo vim /etc/nginx/ssh.conf
# added for socket error
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
server {
server_name ssh.xxx.xxx;
client_max_body_size 1024m;
location / {
# added for socket error
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 代理到本地https地址
proxy_pass https://127.0.0.1:8182/;
}
}
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
这三行是为了解决报错
Unable to connect to the Sshwifty backend server: WebSocket Error (1006)
而添加的。
随后nginx平滑加载新的配置
nginx -t
nginx -s reload
我是使用的certbot申请的ssl证书,随后就可以基于https:域名访问web ssh客户端了
问题解决:
1、
Unable to authenticate: TypeError: Cannot read property 'importKey' of undefined
这个问题,主要是新的Chrome和Chromium内核浏览器,已经不支持非SSL的加密传输在SSH上,所以解决方法:
将sshwifty的 URL改为https,即需要有一个ssl证书
2、
Unable to connect to the Sshwifty backend server: WebSocket Error (1006)
这个一般出现在成功反向代理sshwifty后,需要连接本地终端时,解决办法就是修改反向代理的文件,nginx的配置文件可参考上述部分,主要是以下三行配置,注意位置不要放错
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
参考:
1、在Linux服务器上安装Web SSH--SSHwifty的部署和使用
3、官方Demo