AmazonLinux
RDP
guacamole

Amazon Linux にApache Guacamoleをインストール

More than 1 year has passed since last update.

はじめに

Apache Guacamoleはブラウザベースのリモートデスクトップクライアントです。
HTML5に対応しているブラウザでアクセスし、リモート接続することができます。

ここでは、Amazon Linuxを踏み台にして、別のWindows ServerにRDP接続することを目的としています。

環境

インスタンスは作成したばっかりの状態です。
Elastic IPは割り当ててあります。

$ uname -a
Linux ip-hoge-hoge-hoge-hoge 4.4.41-36.55.amzn1.x86_64 #1 SMP Wed Jan 18 01:03:26 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

インストール 下準備

yum update

$ sudo yum update

EPEL有効化

$ sudo yum-config-manager --enable epel

gcc

$ sudo yum install gcc

JDK

事前にOracleからJDK8のrpmを入手して~/に配備する

$ sudo rpm -ivh jdk-8u121-linux-x64.rpm
$ vim .bash_profile
JAVA_HOME=/usr/java/default
export JAVA_HOME
$ source .bash_profile

Maven

$ cd
$ curl -O http://ftp.jaist.ac.jp/pub/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.zip
$ unzip apache-maven-3.3.9-bin.zip
$ sudo mv apache-maven-3.3.9 /opt/
$ vim .bash_profile
PATH=/opt/apache-maven-3.3.9/bin:$PATH
$ source .bash_profile

Tomcat

インストール

$ sudo useradd -s /sbin/nologin tomcat
$ curl -O http://ftp.kddilabs.jp/infosystems/apache/tomcat/tomcat-8/v8.5.11/bin/apache-tomcat-8.5.11.tar.gz
$ tar -xzvf apache-tomcat-8.5.11.tar.gz
$ sudo mv apache-tomcat-8.5.11 /opt/apache-tomcat
$ sudo chown -R tomcat:tomcat /opt/apache-tomcat

サービス設定

$ sudo vim /etc/profile

3行追加

/etc/profile
JRE_HOME=/usr/java/default
CATALINA_HOME=/usr/local/tomcat
export JRE_HOME CATALINA_HOME
$ source /etc/profile
$ sudo vim /etc/init.d/tomcat8
/etc/init.d/tomcat8
#!/bin/bash
#
# tomcat8
#
# chkconfig: - 80 20
#
### BEGIN INIT INFO
# Provides: tomcat8
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Description: Tomcat 8
# Short-Description: start and stop tomcat
### END INIT INFO

## Source function library.
#. /etc/rc.d/init.d/functions
export GUACAMOLE_HOME=/etc/guacamole
export JAVA_HOME=/usr/java/default
export JAVA_OPTS="-Dfile.encoding=UTF-8 \
  -Dnet.sf.ehcache.skipUpdateCheck=true \
  -XX:+UseConcMarkSweepGC \
  -XX:+CMSClassUnloadingEnabled \
  -XX:+UseParNewGC \
  -Xms512m -Xmx512m"
export PATH=$JAVA_HOME/bin:$PATH
TOMCAT_HOME=/opt/apache-tomcat
TOMCAT_USER=tomcat
SHUTDOWN_WAIT=20

tomcat_pid() {
  echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'`
}

start() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ] 
  then
    echo "Tomcat is already running (pid: $pid)"
  else
    # Start tomcat
    echo "Starting tomcat"
    ulimit -n 100000
    umask 007
    /bin/su -p -s /bin/sh $TOMCAT_USER $TOMCAT_HOME/bin/startup.sh
  fi


  return 0
}

stop() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then
    echo "Stoping Tomcat"
    /bin/su -p -s /bin/sh $TOMCAT_USER $TOMCAT_HOME/bin/shutdown.sh

    let kwait=$SHUTDOWN_WAIT
    count=0;
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
      echo -n -e "\nwaiting for processes to exit";
      sleep 1
      let count=$count+1;
    done

    if [ $count -gt $kwait ]; then
      echo -n -e "\nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds"
      kill -9 $pid
    fi
  else
    echo "Tomcat is not running"
  fi

  return 0
}

case $1 in
start)
  start
;; 
stop)   
  stop
;; 
restart)
  stop
  start
;;
status)
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then
    echo "Tomcat is running with pid: $pid"
  else
    echo "Tomcat is not running"
  fi
;; 
esac    
exit 0
$ sudo chmod +x /etc/init.d/tomcat8
$ sudo service tomcat8 start
$ sudo chkconfig tomcat8 on

Manager Appの利用設定

ユーザ追加

$ sudo vim /opt/apache-tomcat/conf/tomcat-users.xml
tomcat-users.xml
<?xml version="1.0" encoding="UTF-8"?>
...
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
...
  <role rolename="manager-gui"/>
  <user username="admin" password="admin" roles="manager-gui"/>
</tomcat-users>

アクセス制限解除

$ sudo vim /opt/apache-tomcat/webapps/manager/META-INF/context.xml
tomcat-users.xml
<?xml version="1.0" encoding="UTF-8"?>
...
<Context antiResourceLocking="false" privileged="true" >
  <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
</Context>

Required dependenciesになっているものをインストール

今回はRDP対応だけです。

$ sudo yum install cairo-devel libjpeg-turbo-devel libpng-devel uuid-devel freerdp-devel

Guacamoleサーバ インストール

$ cd
$ curl -O http://ftp.meisei-u.ac.jp/mirror/apache/dist/incubator/guacamole/0.9.11-incubating/source/guacamole-server-0.9.11-incubating.tar.gz
$ tar -xzf guacamole-server-0.9.11-incubating.tar.gz
$ cd guacamole-server-0.9.11-incubating/

$ ./configure --with-init-dir=/etc/init.d
$ make
$ sudo make install
$ sudo ldconfig
$ sudo chkconfig guacd on

Guacamoleクライアント インストール

$ cd
$ curl -O http://ftp.riken.jp/net/apache/incubator/guacamole/0.9.11-incubating/source/guacamole-client-0.9.11-incubating.tar.gz
$ tar -xzf guacamole-client-0.9.11-incubating.tar.gz
$ cd guacamole-client-0.9.11-incubating/
$ mvn package
$ sudo cp guacamole/target/guacamole-0.9.11-incubating.war /opt/apache-tomcat/webapps/guacamole.war

Guacamole設定

$ sudo mkdir /etc/guacamole
$ sudo vim /etc/guacamole/guacamole.properties
guacamole.properties
guacd-hostname: localhost
guacd-port: 4822
user-mapping: /etc/guacamole/user-mapping.xml
$ sudo vim /etc/guacamole/user-mapping.xml
<user-mapping>
  <authorize
   username="Guacamoleへのログインユーザ名"
   password="Guacamoleへのログインパスワード(ハッシュ値)"
   encoding="md5">

    <connection name="RDP">
      <protocol>rdp</protocol>
      <param name="hostname">接続先ホスト名(IPアドレス)</param>
      <param name="username">RDPで接続するユーザ名</param>
      <param name="password">RDPで接続するパスワード</param>
      <param name="domain">RDPで接続するADドメイン</param>
      <param name="port">RDPで接続するポート</param>
    </connection>

  </authorize>
</user-mapping>

md5のハッシュ値は以下で確認可能です。
RDPの接続パスワードは、md5でハッシュ化しないでそのまま記述しています。
※encoding="md5" を記述しなければ素のパスワードも書けます

echo -n 'パスワード' | md5sum

設定が終わったら各サービスを再起動します。

$ sudo service guacd restart
$ sudo service tomcat8 restart

キャプチャ

http://hoge.hoge.hoge.hoge:8080/guacamole/
からログインします。
ログイン画面

ログインできました。
設定ファイルにアカウント情報を記述してあるので、なにも聞かれずに即座にRDPで接続されます。
RDP画面

サインアウトすると、こんな画面です。
「Recconect」で再接続し、「Logout」でログイン画面に戻ります。
Disconnected画面

TODO

/etc/init.d/tomcat8 に「GUACAMOLE_HOME」を記述するのは如何なものか。
なにか良い方法が分かれば修正する。

参考

Guacamole Manual

踏み台サーバに最適!ブラウザからVNC、RDPに接続出来るリモートデスクトップクライアント『Guacamole』

自宅サーバのバーチャルラボ化 (2) Guacamole導入