当前位置:首页 > 学习 > 正文内容

CentOS下搭建WebSSH并配置密码访问

hunterzuo2年前 (2023-06-24)学习412

webssh-banner.webp

自己平时比较喜欢折腾,手上有一些linux系统的vps,有的时候不在家里或者办公室没有SSH客户端,管理这些vps比较麻烦。这几天在网上逛,发现可以通过搭建网页版的SSH客户端,这下就方便了。只要把webssh放在一台网络比较友好的vps上,那么几乎可以实现随时随地方便地连接和管理我的vps了。今天,就尝试着把网上看到的一些东西整合一下,记录自己搭建网页端webssh的全过程。

安装docker和docker-compose

# 下载docker安装脚本
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo systemctl start docker
$ sudo systemctl enable docker

# 下载docker-compose二进制文件
$ curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
$ sudo chmod +x /usr/local/bin/docker-compose

# 创建软链接
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 测试是否安装成功
$ docker-compose version

设定docker-compose设置文件并运行

# 用lnmp vhost add命令新增网站,进入网站目录,创立并编辑docker-compose.yml文件
$ vim docker-compose.yml

将以下配置写入文件中

version: '3'
services:
  webssh:
    image: dbcawa/webssh
    container_name: webssh
    ports:
      - 9008:8888
    restart: always
    privileged: true

Snipaste_2023-06-24_19-20-29.png

运行docker-compose

# 启动docker-compose
$ docker-compose up -d

Snipaste_2023-06-24_19-24-36.png

这时候,理论上来说,访问域名的9008端口,就可以看到webssh的界面了。但实际上,为了安全考虑,webssh是不允许公网上非加密访问的,明文传输很容易被嗅探失去安全。这时,会出现如下错误页面

Snipaste_2023-06-24_19-29-42.png

查看docker-compose的日志文件,提示如下的错误

# 查看日志
$ sudo docker-compose logs -f

Snipaste_2023-06-24_19-35-21.png

配置反向代理

这个时候需要我们配置https加密访问。为了一步到位,我准备使用反向代理,把9008端口的访问转发到80端口上,再使用301跳转强制https访问

# 进入lnmp的网站配置文件目录,备份原配置文件
$ cd /usr/local/nginx/conf/vhost
$ cp webssh.yourdomain.com.conf webssh.yourdomain.com.con.bak

# 修改配置文件
$ vi webssh.yourdomain.com.conf

将以下一段代码写入配置文件中(网站需提前开启https访问)

location ^~ /
{
    proxy_pass http://127.0.0.1:9008;
    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 REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 300;
    proxy_http_version 1.1;
    # proxy_hide_header Upgrade;
    add_header X-Cache $upstream_cache_status;
}

这时候,再访问你的域名http://yourdomain.com,就会出现webssh的页面,也不用带9008端口这个尾巴了,而且直接跳转到了https

Snipaste_2023-06-24_19-54-26.png

但是,好像,这样有问题。为什么?因为这样所有人都可以访问这个页面,意味着谁都可以用你的webssh,一来你的服务器暴露在公网上会被入侵,更重要的是坏人肯定会拿你的webssh做跳板搞入侵干坏事,要是这样你就麻烦了。所以,必须给webssh上一道锁,也就是设置用户名和密码访问

设置用户名和密码访问

# 安装密码生成工具
$ sudo yum install httpd -y

# 生成用户和密码文件
$ sudo htpasswd -c /usr/local/nginx/password username
## 其中username是用户名,自己可以随便命名
## 回车后根据提示连续输入两次密码

# 删除指定的用户
$ htpasswd -D /usr/local/nginx/password username

#修改用户名和密码
$ htpasswd -D /usr/local/nginx/password username
$ htpasswd -b /usr/local/nginx/password username pass
## -D 删除指定的用户
## -b htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码
## -p htpassswd命令不对密码进行进行加密,即明文密码

修改Nginx配置文件

# 进入lnmp的nignx配置文件夹,修改相应的配置文件yourdomain.com.conf
$ cd /usr/local/nginx/conf/vhost
$ vi yourdomain.com.conf

在配置文件中的server加上认证配置,加入auth_basic和auth_basic_user_file两个项目。这里需要注意,如果你的网站是开启了https的,这两个项目需要加到https的配置中,也就是第二个server中。

server {  
  listen 80;  
  server_name  localhost;  
  # ...
  
  auth_basic "请输入用户和密码"; # 验证时的提示信息
  auth_basic_user_file /usr/local/nginx/password; # 认证文件

  location / {     
     root   /var/www;      
     index  index.html index.htm;
  }  
  # ...
}

# 配置文件修改完成后,重新启动nginx
$ sudo service nginx restart

访问刚才的页面,就会弹出对话框,要求进行认证。输入正确的用户名和密码,就可以进入,放心地使用了

Snipaste_2023-06-24_20-34-39.png

贴一个我自己服务器上的配置文件

server
    {
        listen 80;
        #listen [::]:80;
        server_name yourdomain.com ;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/yourdomain.com;
        #include rewrite/other.conf;
        #error_page   404   /404.html;
        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
        include enable-php-pathinfo.conf;
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }
        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }
        location ~ /.well-known {
            allow all;
        }
        location ~ /\.
        {
            deny all;
        }
        location / {
            return 301 https://$host$request_uri;
        }
        access_log  /home/wwwlogs/yourdomain.com.log;
    }
server
    {
        listen 443 ssl http2;
        #listen [::]:443 ssl http2;
        server_name yourdomain.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/yourdomain.com;
        
        auth_basic "请输入用户和密码";
        auth_basic_user_file /usr/local/nginx/password;
        
        ssl_certificate /usr/local/nginx/conf/ssl/yourdomain.com/fullchain.cer;
        ssl_certificate_key /usr/local/nginx/conf/ssl/yourdomain.com/yourdomain.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
        
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
        
        location ^~ /
                 {
                    proxy_pass http://127.0.0.1:9008;
                    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 REMOTE-HOST $remote_addr;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "upgrade";
                    proxy_read_timeout 300;
                    proxy_http_version 1.1;
                  # proxy_hide_header Upgrade;
                    add_header X-Cache $upstream_cache_status;
                  }
                  
        include rewrite/other.conf;
        
        #error_page   404   /404.html;
        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
        
        include enable-php-pathinfo.conf;
        
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }
        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }
        location ~ /.well-known {
            allow all;
        }
        location ~ /\.
        {
            deny all;
        }
        access_log  /home/wwwlogs/yourdomain.com.log;
    }


最后,贴一个登陆进去以后的效果图,简洁朴素大方,使用起来很有感觉。虽然sshwifty似乎功能更多,界面也更好看一些,但它配置起来也更麻烦,还不如这个简单的webssh来的实在。

Snipaste_2023-06-24_20-47-53.png

扫描二维码推送至手机访问。

版权声明:本文由人生如诗发布,如需转载请注明出处。

本文链接:https://blog.nifeng.win/?id=12

分享给朋友:

“CentOS下搭建WebSSH并配置密码访问” 的相关文章

CentOS下使用Docker搭建Squid Proxy代理服务器

CentOS下使用Docker搭建Squid Proxy代理服务器

作为一个老资格的网虫,有的时候需要使用socks5或者http代理服务器。socks5代理服务器我一般使用dante,网上有不少安装方法,还有一键安装脚本,但是http代理服务器比较少涉及,之前折腾过tinyproxy也搭建成功了,但是squid一直没有试过。对大名鼎鼎的squid敬仰已久,dock...

CentOS环境下搭建WordPress博客程序

CentOS环境下搭建WordPress博客程序

WordPress是目前最流行、用户最多、使用最广泛的博客程序,它的功能丰富完善,上下游的生态完备,插件拓展众多,各类教程很多,对于新手来说是一款适合的个人博客程序。但是功能众多的同时,WordPress也显得很庞大臃肿,加载起来比较慢,远不如Z-blog,typecho之类的程序。个人角度来看,我...

CentOS下搭建Zdir目录列表程序

CentOS下搭建Zdir目录列表程序

Zdir是一款相对比较流行的目录列表程序,与Directory Lister不同的是Zdir可以用户登录以后实现文件上传,可以实现文件分享、二维码等功能。相比起其他的目录列表程序,Zdir也是比较轻量、简洁的,受到了很多人的欢迎。它并没有像Directory Lister那样最朴素的直链功能,但仍然...

CentOS下搭建TinyProxy代理服务器

CentOS下搭建TinyProxy代理服务器

  TinyProxy是一个linux下的轻量级代理服务器软件,功能比较全面,软件的安装和配置相对于squid proxy来说比较简单,适用于搭建简易的要求不高的http(s)代理服务器,个人使用是完全足够了。我的应用场景是用美国服务器搭建了一个cloudreve个人网盘,用Raidriv...