在Ubuntu 16.04 LTS上使用鳄梨调味酱创建HTML 5 RDP / SSH前端

介绍

本教程的目的是摆脱公共SSH和公共RDP连接。通过将所有这些都放置在非常方便的HTML5客户端之后,我们可以添加用于访问云的安全层。

鳄梨酱还记录任何远程访问,因此未经授权的访问变得更加可追踪。

注意:对于我们进行加密(选项B),我们需要一个域名。如果您没有,则可以跳过此步骤,而只需执行选项A即可

步骤1-准备系统

首先在所需的Vultr区域中旋转VPS。一个1024 MBVPS就足够了,如鳄梨是不是苛求。

启用专用IP

首先在VPS上启用专用网络。这充分证明这里

准备防火墙

首先,让我们稍微增强一下图像。让我们检查是否已配置了映像ufw

root@vultr:~# ufw status
Status: inactive

默认情况下它是禁用的,因此我们将需要添加一些规则。

  • 规则1:ssh:TCP端口22
  • 规则2:http:TCP端口8080(鳄梨调味酱的临时测试规则)

让我们从配置这些端口开始。

ufw allow 22/tcp
ufw allow 8080/tcp

接下来启用防火墙。

ufw enable

如果收到警告,请不要担心。如果添加了port 22,那么您将不会遇到任何问题。

root@vultr:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

启用后,请求防火墙的状态,我们将看到我们的端口配置。

ufw status

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
8080/tcp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
8080/tcp (v6)              ALLOW       Anywhere (v6)

第2步-安装鳄梨调味酱

安装所有依赖项

在开始安装之前,我们需要更新和升级存储库。使用Tomcat基于Java的软件包(如),可以不断发现被发现的错误及其相关的错误修正。通常最好先执行此操作,而不是直接进入我们的安装。

apt-get update
apt-get -y upgrade 

接下来是所有依赖项。鳄梨调味酱有很多。(可以在此处找到依赖项及其功能的完整列表)。让我们继续安装所有这些。

apt-get -y install build-essential tomcat8 freerdp libcairo2-dev libjpeg-turbo8-dev libpng12-dev libossp-uuid-dev libavcodec-dev libavutil-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvorbis-dev libwebp-dev mysql-server mysql-client mysql-common mysql-utilities libswscale-dev libvncserver-dev libpulse-dev libssl-dev

当安装程序要求提供MySQL根密码时,请提供一个,并请务必注意。我们稍后将使用此密码来创建Guacamole数据库。

下载鳄梨酱

现在我们有了所有的依赖关系,我们可以继续下载Guacamole。鳄梨酱本身主要以源代码形式提供,而不是二进制文件。首先,我们将移至该/tmp文件夹,以避免使磁盘的其他部分混乱。然后下载所有源代码。

有四个源/二进制文件可供下载:

  • guacamole-0.9.13-incubating.war:这是Web应用程序。一个WAR文件是一个压缩包网站提供托管的Tomcat的网站上的一个单一的网站
  • guacamole-server-0.9.13-incubating.tar.gz:此文件将提供后端guacd应用程序。这将通过RDP和SSH创建流。
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz:我们将使用本地MySQL数据库,因此我们需要关联的JDBC连接器。
  • mysql-connector-java-5.1.43.tar.gz注意:没有数据库驱动程序,JDBC连接器将无法执行任何操作。该文件由MySQL团队自己提供。

注意:下载已解析到最近的服务器

cd /tmp
wget http://apache.belnet.be/incubator/guacamole/0.9.13-incubating/binary/guacamole-0.9.13-incubating.war
wget http://apache.cu.be/incubator/guacamole/0.9.13-incubating/source/guacamole-server-0.9.13-incubating.tar.gz
wget http://apache.cu.be/incubator/guacamole/0.9.13-incubating/binary/guacamole-auth-jdbc-0.9.13-incubating.tar.gz
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.43.tar.gz

下载完所有这些文件后,提取tar.gz

tar -xzvf guacamole-server-0.9.13-incubating.tar.gz
tar -xzvf guacamole-auth-jdbc-0.9.13-incubating.tar.gz
tar -xzvf mysql-connector-java-5.1.43.tar.gz

编译鳄梨调味酱

现在,我们已经提取了所有源代码,让我们创建一些guacamole文件夹,这些文件将被鳄梨调味酱应用程序及其依赖项使用。

mkdir -p /etc/guacamole/lib
mkdir -p /etc/guacamole/extensions

所有新的鳄梨调味酱二进制文件都已准备就绪。现在,我们可以开始编译和安装过程。移至解压缩的Guacamole Server文件夹。

cd /tmp/guacamole-server-0.9.13-incubating

将应用程序配置为还创建一个init.d文件,以便以后将其作为服务运行。

./configure --with-init-dir=/etc/init.d

在所有库和协议上,该命令应以“ yes”结尾。如果不是,请返回并检查apt-get命令以确保您没有错过任何软件包。

------------------------------------------------
guacamole-server version 0.9.13-incubating
------------------------------------------------

   Library status:

     freerdp ............. yes
     pango ............... yes
     libavcodec .......... yes
     libavutil ........... yes
     libssh2 ............. yes
     libssl .............. yes
     libswscale .......... yes
     libtelnet ........... yes
     libVNCServer ........ yes
     libvorbis ........... yes
     libpulse ............ yes
     libwebp ............. yes

   Protocol support:

      RDP ....... yes
      SSH ....... yes
      Telnet .... yes
      VNC ....... yes

   Services / tools:

      guacd ...... yes
      guacenc .... yes

   Init scripts: /etc/init.d

Type "make" to compile guacamole-server.

接下来编译并安装Gucamole服务器。

make && make install

完成所有操作后,请运行ldconfig以重建已添加库的搜索路径。

ldconfig

通过使用systemctl设置guacd程序(鳄梨酱守护程序)来继续启动。

systemctl enable guacd

鳄梨酱二进制文件现已安装。现在,我们将为Tomcat准备Web应用程序。

首先将war文件移动到guacamole我们刚刚创建的文件夹中,完成后在tomcat目录中创建一个逻辑链接以指向我们的war文件。

cd /tmp
mv guacamole-0.9.13-incubating.war /etc/guacamole/guacamole.war
ln -s /etc/guacamole/guacamole.war /var/lib/tomcat8/webapps/

然后我们需要mysql连接器和JDBC。extensions文件夹中需要JDBC驱动程序,文件夹中需要连接器lib

cp mysql-connector-java-5.1.43/mysql-connector-java-5.1.43-bin.jar /etc/guacamole/lib/
cp guacamole-auth-jdbc-0.9.13-incubating/mysql/guacamole-auth-jdbc-mysql-0.9.13-incubating.jar /etc/guacamole/extensions/

配置Guacamole和Tomcat

连接器和JDBC安装到位后,我们需要编辑tocamt8文件。该文件包含许多tomcat8设置,在我们的情况下,我们需要GUACAMOLE_HOME在文件末尾添加变量。

nano /etc/default/tomcat8

追加以下内容。

GUACAMOLE_HOME=/etc/guacamole

创建数据库

接下来是创建数据库。鳄梨酱将其连接配置存储在数据库中,而不是文件中。

root password使用安装期间使用的登录名。

mysql -u root -p

第一步是创建一个名为“ guacamole_db”的数据库。

create database guacamole_db;

然后运行create user命令。这将创建一个具有密码的用户mysupersecretpassword,该用户只能从进行连接localhost

create user 'guacamole_user'@'localhost' identified by "mysupersecretpassword";

CRUD向该用户授予数据库操作guacamole_db

GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';

刷新特权并退出外壳。

flush privileges;
exit

通过将Guacamole模式添加到我们新创建的数据库中来完成。

cat /tmp/guacamole-auth-jdbc-0.9.13-incubating/mysql/schema/*.sql | mysql -u root -p guacamole_db

完成后,我们需要编辑guacamole.properties文件。该文件包含我们最近创建的MySQL服务器配置。

nano /etc/guacamole/guacamole.properties

附加MySQL连接详细信息和凭据。

mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: mysupersecretpassword

通过创建指向tomcat共享文件夹的符号链接来完成操作,因为WAR文件将在其中搜索这些属性。

ln -s /etc/guacamole /usr/share/tomcat8/.guacamole

测试设置

通过重新启动tomcat8服务器结束并启动guacd服务器守护程序。

service tomcat8 restart
service guacd start

您可以使用status命令进行验证。

service tomcat8 status
service guacd status

现在,您可以在端口上浏览到VPS 8080

http://<yourpublicip>:8080/guacamole/

使用用户名guacadmin和相同的密码guacadmin。这将授予您访问一个空的Guacamole服务器的权限。

单击用户名的右上角,guacadmin然后选择Settings。进入设置页面后,转到Users选项卡并选择用户guacadmin

现在,将您的密码更改为其他密码,或创建一个新的管理员用户并删除默认密码guacadmin

步骤3-微调和清理

这些是最后的步骤:完成后进行清理。

/tmp文件夹中删除下载的源代码和二进制文件。

rm -rf /tmp/guacamole-*
rm -rf /tmp/mysql-connector-java-*

另外,将Guacamole Web应用程序设置为默认应用程序。在tomcat生态系统中,获取ROOT文件夹的应用程序是在您访问网站时默认启动的应用程序。

删除旧的ROOT占位符。

rm -rf /var/lib/tomcat8/webapps/ROOT

并为鳄梨酱服务器创建一个符号链接ROOT

ln -s /var/lib/tomcat8/webapps/guacamole /var/lib/tomcat8/webapps/ROOT

这需要重新启动tomcat。

service tomcat8 restart

步骤4(选项A)-仅在HTTP上运行

  • 如果您不打算使用“让我们加密证书”而不使用DNS,请执行此步骤中的操作,然后直接转到步骤6。-选项A
  • 如果您想创建一个更安全的站点并且已经准备好DNS,则可以跳过此步骤,直接进入选项B(第5步)。

编辑tomcat8/server.xml文件并更改连接器端口。

nano /etc/tomcat8/server.xml

搜索Connector port

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443" />

并替换808080

默认情况下,tomcat不允许绑定下面的端口1024。为此,我们需要告诉tomcat8创建经过身份验证的绑定。

编辑defaulttomcat8 的文件并取消注释该AUTHBIND行,并使用该选项yes

nano /etc/default/tomcat8

AUTHBIND=yes

一旦完成,请安装intall authbind

apt-get install authbind

配置它,以便80tomcat8可以声明端口。

touch /etc/authbind/byport/80
chmod 500 /etc/authbind/byport/80
chown tomcat8 /etc/authbind/byport/80

允许端口80穿过防火墙并删除的规则8080

ufw allow 80/tcp
ufw delete allow 8080/tcp

重新启动tomcat。

service tomcat8 restart

就是这样,现在鳄梨调味酱应该在port上运行80

步骤5(选项B)-设置Nginx

Nginx的安装和配置

Tomcat确实不是可与结合使用的最佳,最可靠的应用程序之一certbot。幸运的是Nginx是。我们只是将tomcat代理到Nginx。它使用certbot的即用型功能,但要牺牲一点RAM。

apt-get install nginx

安装完成后,编辑默认配置。

nano /etc/nginx/sites-available/default

删除所有示例配置,然后添加以下配置。

server {      
  listen 0.0.0.0:80;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        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-Host $server_name;
  }
}

这将为运行在的网站创建代理8080。重新启动Nginx,并在启动时启用它。

systemctl restart nginx
systemctl enable nginx

检查是否一切正常。

systemctl status nginx

禁用测试端口,8080并允许端口上的流量80

ufw allow 80/tcp
ufw delete allow 8080/tcp

安装让我们加密

在使用之前certbot,我们需要向ppa包含certbot软件包的系统中添加正确的内容。

add-apt-repository ppa:certbot/certbot

按“ ENTER”接受配置更改。

更新apt以收集新软件包。

apt-get update

最后,安装用于分配证书的Nginx模块。

apt-get -y install python-certbot-nginx

配置Nginx以使用证书

配置防火墙以允许HTTPS

ufw allow 443/tcp

在我们可以请求新证书之前,我们需要一个DNS名称。

nano /etc/nginx/sites-available/default

添加以下server_name设置。

server_name rdp.example.com;

更改配置以反映此新设置。

server {
  server_name rdp.example.com;

  listen 0.0.0.0:80;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        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-Host $server_name;
  }
}

检查是否一切正常,然后重新启动Nginx。

nginx -t
service nginx restart

现在向certbot申请证书。

certbot --nginx -d rdp.example.com

提供您的电子邮件,并同意安装程序提出的问题。(您可以安全地选择“ No”来共享您的电子邮件。)Certbot会自动询问它需要做什么HTTPS。我们将使用选项2 :redirect to HTTPS

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

我们要做的最后一件事是更新DH参数。默认情况下,对于2017年标准而言,这些功能有些薄弱。

创建一些新的。

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

接下来,将它们添加到Nginx中的默认站点。

nano /etc/nginx/sites-available/default

将它们添加到服务器配置。

server {
  server_name rdp.example.com;

  listen 0.0.0.0:80;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        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-Host $server_name;
  }
}

检查错误。

nginx -t

通过重新启动服务器来应用更改。

service nginx restart

清理旧8080规则

ufw delete allow 8080/tcp

注意:如果您收到“ 502 Bad Gateway”,则需要重新启动tomcat8

service tomcat8 restart

自动续订证书

让我们加密证书需要续订。我们可以为此创建一个cron作业。首先编辑crontab

crontab -e

添加以下行。

00 2 * * * /usr/bin/certbot renew --quiet

如果任何证书需要续签,它将在2:00 AM进行检查,如果需要续签,则将对其进行续签。

第6步-全部测试

转到您的Guacamole服务器(http://<ip>/https://rdp.example.com))。

对于此测试,您将需要两个以上的实例:一个Linux VM和另一个都启用了私有IP的Windows Server 2012 R2。

添加Windows RDP连接

点击右上角的“ username”,然后转到“ Settings”。然后转到“ Connections”并选择“ New Connection”。

填写以下设置(您可以将其他设置保留为默认设置)。

Name: Windows Server 2012 R2
Location: ROOT
Protocol: RDP
Maximum number of connections: 1
Maximum number of connections per user: 1
Parameters > Hostname: 10.99.0.12
Parameters > Port: 3389
Username: Administrator
Password: <password> (provided by Vultr)
Security mode: Any
Ignore server certificate: <checked>

按“ save”并返回主屏幕。现在您可以单击“ Windows Server 2012 R2”连接,它将RDP连接到此计算机。

添加Linux SSH连接

按“ Ctrl+Shift+Alt”。这将弹出侧面的菜单。您可以在此处断开鳄梨调味酱或执行鳄梨调味酱的其他管理任务。

点击username菜单顶部的,然后转到“ Settings”。然后转到“ Connections”标签,然后选择“ New Connection”。

填写以下设置(您可以将其他设置保留为默认设置)。

Name: Linux
Location: ROOT
Protocol: SSH
Maximum number of connections: 5
Maximum number of connections per user: 2
Parameters > Hostname: 10.99.0.11
Parameters > Port: 22
Username: root
Password: <password> (provided by Vultr)

按“ save”并返回主屏幕。现在,您可以单击此新创建的连接,并通过SSH连接到Linux服务器。

结论

您现在有了Web RDP / SSH HTML5网关。现在,您可以对平台的公共RDP和SSH访问进行防火墙保护,并可以从任何现代浏览器访问您的环境。有关鳄梨酱可以提供的更多信息,请在此处观看一个很棒的视频,展示该平台的所有可能性。



Leave a Comment

如何在CentOS 7上安装Oxwall

如何在CentOS 7上安装Oxwall

Oxwall是一个开源社交网络软件平台,可用于免费构建自定义社交网站(SNS)。在这篇文章中,

如何在Ubuntu 16.10上安装Review Board

如何在Ubuntu 16.10上安装Review Board

使用其他系统?Review Board是一个免费且开源的工具,用于检查源代码,文档,图像等。这是基于网络的软件战

如何在Debian 9 LAMP VPS上安装October 1.0 CMS

如何在Debian 9 LAMP VPS上安装October 1.0 CMS

使用其他系统?October 1.0 CMS是基于Laravel框架构建的简单,可靠,免费和开源的内容管理系统(CMS)

如何使用Ubuntu 15.10在Vultr服务器上安装Xubuntu桌面

如何使用Ubuntu 15.10在Vultr服务器上安装Xubuntu桌面

Xubuntu是XFCE + Ubuntu!XFCE是Ubuntu的轻量级GUI /桌面。Vultr服务器需要其他依赖项,默认情况下未安装这些依赖项。

如何在Debian 9上安装Monica

如何在Debian 9上安装Monica

使用其他系统?Monica是一个开源的个人关系管理系统。可以将其视为CRM(销售团队使用的一种流行工具

如何使用SSL和安全密码保护由Nginx驱动的网站

如何使用SSL和安全密码保护由Nginx驱动的网站

简介SSL(代表安全套接字层)及其后续版本TLS(代表传输层安全性)是需要加密的加密协议。

如何在Fedora 26 LAMP VPS上安装MODX Revolution

如何在Fedora 26 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

如何在Ubuntu 17.04上安装JuliaLang

如何在Ubuntu 17.04上安装JuliaLang

朱莉娅(Julia)通常称为JuliaLang,是一种用于数值计算的编程语言。Julia的速度和C一样快,但是却不牺牲可读性

在Ubuntu 14.04上安装Ruby on Rails

在Ubuntu 14.04上安装Ruby on Rails

Ruby on Rails(RoR)是用Ruby编程语言编写的框架,可让您将Ruby与HTML,CSS和类似的程序结合使用。

在Fedora 28上安装Anchor CMS

在Fedora 28上安装Anchor CMS

使用其他系统?Anchor是用PHP编写的轻量级开源博客CMS。Anchors源代码托管在GitHub上。本指南将向您展示

将Debian 9升级到Debian 10

将Debian 9升级到Debian 10

简介Debian 10(Buster)是Debian 9(Stretch)的后继产品。它于2019年7月6日发布。在本教程中,我们将升级一个existin

如何管理Linux服务器时区设置

如何管理Linux服务器时区设置

在Linux服务器上正确设置日期和时间非常重要。您的服务器日志和其他重要信息都将反映时区

如何在Ubuntu 16.04上安装Taiga项目管理工具

如何在Ubuntu 16.04上安装Taiga项目管理工具

使用其他系统?Taiga是用于项目管理的免费和开源应用程序。与其他项目管理工具不同,Taiga使用增量

在Ubuntu上配置Nagios:第1部分-Nagios服务器

在Ubuntu上配置Nagios:第1部分-Nagios服务器

本文是有关在Ubuntu 14.04上安装和配置Nagios的2部分系列文章的一部分。第1部分:Nagios服务器第2部分:远程主机概述Nagio

如何访问Vultr VPS

如何访问Vultr VPS

Vultr提供了几种不同的方式来访问VPS以进行配置,安装和使用。访问凭据VPS ar的默认访问凭据

如何在Debian 9上安装Grav CMS

如何在Debian 9上安装Grav CMS

使用其他系统?Grav是用PHP编写的开源平面文件CMS。Grav源代码公开托管在GitHub上。本指南将向您展示如何

如何在Fedora 26 LAMP VPS上安装Pagekit 1.0 CMS

如何在Fedora 26 LAMP VPS上安装Pagekit 1.0 CMS

使用其他系统?Pagekit 1.0 CMS是一个美观,模块化,可扩展,轻量级,免费和开源的内容管理系统(CMS),具有

如何在Ubuntu 16.04 LAMP VPS上安装BigTree CMS

如何在Ubuntu 16.04 LAMP VPS上安装BigTree CMS

使用其他系统?BigTree CMS 4.2是一种快速,轻量级,免费和开源的企业级内容管理系统(CMS),具有广泛的功能。

如何在CentOS 7上设置vsFTPd

如何在CentOS 7上设置vsFTPd

FTP是用于通过Internet传输文件的有用协议,本指南将向您展示如何设置vsFTPd(非常安全的文件传输协议守护程序)o

在Debian / Ubuntu中使用Rsync设置文件镜像

在Debian / Ubuntu中使用Rsync设置文件镜像

简介如果您经营一个重要的网站,则最好将文件镜像到辅助服务器。如果您的主服务器有网络

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。

如何在Ubuntu 16.04上安装OpenSIPS控制面板

如何在Ubuntu 16.04上安装OpenSIPS控制面板

快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。

在Fedora 28上安装Akaunting

在Fedora 28上安装Akaunting

学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

诊断Minecraft服务器延迟和低TPS

诊断Minecraft服务器延迟和低TPS

了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息