系统环境:

CentOS7.2 + Tomcat8.5 + JDK18 + guacamole-server0.9.14



安装必要环境:

rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
yum update -y


安装依赖包

yum -y install cairo-devel libjpeg-devel libpng-devel uuid-devel  
yum -y install ffmpeg-devel  freerdp-devel pango-devel libssh2-devel 
yum -y install libtelnet-devel libvncserver-devel pulseaudio-libs-devel  
yum -y install openssl-devel libvorbis-devel libwebp-devel
yum -y install freerdp-plugins ##不安装剪切板不能用


下载安装包:

下载地址:https://guacamole.apache.org/releases/0.9.14/


image.png


guacamole-server安装

tar zxf guacamole-server-0.9.14.tar.gz -C /opt

cd /opt/guacamole-server-0.9.14/

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

##确认是否所有协议都支持

------------------------------------------------

   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
     wsock32 ............. no

   Protocol support:

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

   Services / tools:

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

   Init scripts: /etc/init.d

make && make install


启动guacd服务

# /etc/init.d/guacd start
Starting guacd: SUCCESS


安装guacamole client

1、首先安装jdk 和tomcat,安装过程省略


2、安装client

mv guacamole-0.9.14.war /usr/local/tomcat/webapps


3、修改tomcat server.xml配置

<Host name="localhost"  appBase="webapps"
       unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="guacamole" debug="0" privileged="true" reloadable="true"/>


4、启动tomcat

/etc/init.d/tomcat start


5、使用nginx做反向代理

vim /etc/nginx/conf.d/jump.conf

配置如下

upstream jumpserver { 
      server 127.0.0.1:8080; 
}
server {
    listen       80;
    server_name  jumpserver.xxx.com;
    charset utf-8;
    access_log /var/log/nginx/access_80.log main;
    location / {
        proxy_pass http://jumpserver;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        access_log off;
}
}



写一个tomcat启动脚本

#!/bin/bash
 # description: Tomcat Start Stop Restart
 # processname: tomcat
 # chkconfig: 234 20 80
 JAVA_HOME=/usr/java/jdk1.8.0_151
 export JAVA_HOME
 PATH=$JAVA_HOME/bin:$PATH
 export PATH
 CATALINA_HOME=/usr/local/tomcat
 case $1 in
 start)
 sh $CATALINA_HOME/bin/startup.sh
 ;; 
 stop)   
 sh $CATALINA_HOME/bin/shutdown.sh
 ;; 
 restart)
 sh $CATALINA_HOME/bin/shutdown.sh
 sh $CATALINA_HOME/bin/startup.sh
 ;; 
 esac    
 exit 0


启动tomcat服务

chmod +x /etc/init.d/tomcat
/etc/init.d/tomcat start





创建guacamole配置文件和目录

mkdir /etc/guacamole/


创建guacamole.properties文件

vim  guacamole.properties

guacd-hostname: localhost
guacd-port:     4822
user-mapping.xml: /etc/guacamole/user-mapping.xml
enable-clipboard-integration: true



 创建授权文件 user-mapping.xml

<user-mapping>
        <authorize  password="123456" username="admin">
                <connection name="SRV-OP10-CS01">
                        <protocol>rdp</protocol>
                        <param name="hostname">172.16.0.10</param>
                        <param name="port">13040</param>
                        <param name="username">administrator</param>
                        <param name="password">6bcr"ZqK*LgD;a</param>
                </connection>
                <connection name="SRV-OPS01-LINTEST02">
                        <protocol>ssh</protocol>
                        <param name="hostname">172.16.2.14</param>
                        <param name="port">22</param>
                        <param name="username">cpzeng</param>
                        <param name="password">Dtihsvkr/Sp8gd4rz</param>
                        <param name="enable-sftp">true</param>
                        <param name="sftp-hostname">127.0.0.1</param>
                        <param name="sftp-root-directory">/data/sftp</param>
                        <param name="sftp-username">sftp</param>
                        <param name="sftp-password">123</param>
                </connection>
                 <connection name="SRV-OPS01-LINTEST01">
                        <protocol>ssh</protocol>
                        <param name="hostname">172.16.2.3</param>
                        <param name="port">22</param>
                        <param name="username">cpzeng</param>
                        <param name="password">Dtihsvkr/Sp8gd4rz</param>
                        <param name="enable-sftp">true</param>
                        <param name="sftp-hostname">127.0.0.1</param>
                        <param name="sftp-root-directory">/data/sftp</param>
                        <param name="sftp-username">sftp</param>
                        <param name="sftp-password">123</param>
                </connection>
         </authorize>
</user-mapping>


每一个用户都有一个独立<authorize></authorize>配置段包起来,还可以使用md5加密的密码


使用明文密码
<authorize  password="123456" username="admin">
</authorize>


使用加密的密码
<authorize 
    sername="USERNAME2" 
    password="319f4d26e3c536b5dd871bb2c52e3178" 
    encoding="md5">

</authorize>



要远程连接的主机用<connection></connection>配置段包起来

<connection name="SRV-OPS01-LINTEST02">
      <protocol>ssh</protocol>
      <param name="hostname">172.16.2.14</param>
      <param name="port">22</param>
      <param name="username">cpzeng</param>
      <param name="password">Dtihsvkr/Sp8gd4rz</param>
      <param name="enable-sftp">true</param>
      <param name="sftp-hostname">127.0.0.1</param>
      <param name="sftp-root-directory">/data/sftp</param>
      <param name="sftp-username">sftp</param>
      <param name="sftp-password">123</param>
</connection>


connection配置中有几个参数是必须的,

protocol :使用的协议,如rdp、ssh、vnc
hostname: 主机ip
port:端口
username:登录使用的账号
password: 登录密码

enable-sftp:被连接的linux主机开启sftp,需要在linux服务器上配置sftp,下面会讲如何配置
sftp-hostname:sftp服务器的ip,为本机127.0.0.1,我测试过写其他开启了sftp服务器机器ip,最后还是连到本机的sftp上了
sftp-root-directory:登录linux机器后,sftp指定的路径,如果不配置改选项,则默认为/目录,可以使用web界面来选择上传文件的路径,
如果要上传文件,则登录用户要有目标路径的写入权限,比如登录用户为user1,希望将文件上传到/opt/app目录,则user1要对/opt/app目录有写入权限。所有最好指定一个为777权限的路径
sftp-username:sftp登录用户名
sftp-password:sftp密码


使用guacamole

登录guacamole控制台

http://ip:8080/guacamole-0.9.14

image.png

这里的账号密码使用/etc/guacamole/user-mapping.xml文件中<authorize></authorize>配置段中的username和password

如上面例子中账号密码为admin/123456,注意<connection></connection>中的username和password是服务器的账户密码

image.png


登录后选择要远程连接的机器

image.png


上传文件

同时按住control + alt + shift

在Devices标签下点击配置sftp路径(/data/sftp),点击Upload Files按钮,在弹出的窗口选择要上传的文件即可。注意:需要授权用户对目标路径有写入权限,我这里将/data/sftp目录权限设置为777了,之前一直提示无法上传文件,改了权限就正常了

image.png



SFTP配置

SFTP是要在每一台linux服务器上进行配置的,你要登录哪台机器,需要上传文件到该机器上,就需要配置SFTP,配置过程如下:

groupadd sftp
useradd -g sftp -s /sbin/nologin -M sftp

设置密码:

passwd sftp

创建sftp根目录,即存放文件的目录

mkdir -p /data/sftp
chown root:sftp /data/sftp
chmod 770 /data/sftp


修改sshd_config配置

#Subsystem sftp /usr/libexec/openssh/sftp-server  // 注释这一条配置,


新增以下配置

Subsystem sftp internal-sftp
Match User sftp
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp
        ChrootDirectory /data/sftp



vsftpd配置

windows服务器可以使用vsftpd来上传下载文件

生产环境vsftpd配置文件如下:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
chroot_local_user=YES
ascii_upload_enable=YES
ascii_download_enable=YES
async_abor_enable=YES
local_root=/var/ftp/ops
anon_root=/var/ftp


生产环境中的ftp禁止了匿名登录,只能让运维人员使用ops账号登录

[root@SRV-OPS10-JUMP02 ~]# ll /var/ftp/
total 0
drwxr-xr-x 3 root root 19 May  2 11:18 ops
drwxr-xr-x 2 root root  6 Aug  3  2017 pub
[root@SRV-OPS10-JUMP02 ~]# ll /var/ftp/ops/
total 0
drwxr-x--- 2 ops ops 34 May  2 13:02 upload
[root@SRV-OPS10-JUMP02 ~]# ll /var/ftp/ops/upload/
total 0
-rw-r--r-- 1 ops ops 0 May  2 12:39 New Text Document.txt


测试环境的vsftpd.conf配置

anon_upload_enable=YES
anonymous_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_root=/var/ftp
anon_root=/var/ftp/pub



补充

在生产中发现ssh协议连接linux机器,会出现乱码的情况。这是因为guacamole机器字体不对,可以从windows机器下载黑体和宋体字到linux机器上。

具体操作方法请参考

https://www.linuxidc.com/Linux/2016-09/135548.htm


如果想更换ssh登陆后的字体和颜色,可以在ssh配置中加上color-scheme 参数配置,可选参数:black-whitegray-blackgreen-blackwhite-black


例如:

<connection name="SRV-CPMS03-MQ01">
      <protocol>ssh</protocol>
      <param name="hostname">10.9.186.188</param>
      <param name="port">22</param>
      <param name="username">ansible</param>
      <param name="password">poKh8gwRmla4e&quot;</param>
      <param name="color-scheme">white-black</param>
</connection>