2013年3月6日 星期三

遠端即時顯示 console 或 terminal 的工具

有時候,我們必須透過網路,由遠端以語音或文字來指示某人操作某些指令來達成一些事或者幫朋友除錯、排除故障,可是又無法使用 ssh 登入該主機或是根本沒帳號。由於看不到目前遠端的螢幕,無法詳細知道目前狀況,所以要一直請對方執行幾個指令,並將結果 post 上來,實在有點麻煩;或有時對方並沒有確實按照你的指令來做,有漏掉一些,這都會導致無法順利分析出問題來,所以介紹 gems 這個可以即時顯示遠端 console 的工具。

我知道可以開個帳號,二邊都以 ssh 登入,然後使用 “screen -x” or “tmux attach” 來分享畫面,但是,有時只是為了幾個指令就開個帳號什麼的,太麻煩了啦。

gems 是採 client server 架構,可執行 gems-server 於 console 下或 terminal 中,接著可以在本機或別台機器以 gems-client 連過來,即可看到所有 gems-server 中所看到的 console 或 terminal 中的東西,client 只能觀看,無法操作,就類似是 vnc 開啟觀看模式,但是沒有整個圖形介面,只有 console 或 terminal 中的內容。


安裝:

 

debian, ubuntu 安裝:

$ sudo apt-get install gems

在 debian 中的 gems-server 必須以 root 來執行,因為 lock 檔放在 /var/lock 中,可以簡單的以 root 執行,再 su 到一般使用者,或者對 /usr/bin/gems-server 設定成 setuid 即可用一般 user 來執行,不過這樣很危險,萬一 gems-server 有漏洞,就可以遠端取得 root 了;最好的方式是,直接修改原始碼,將 /var/lock/gems-server.6666 改到 /var/tmp/gems-server.6666,重編即可。

於原始碼中 server/source/defaults.h
change
#define LOCK_PREFIX "/var/lock/gems-server."
to
#define LOCK_PREFIX "/var/tmp/gems-server."
重編再安裝即可

更新: (2013/03/10)
debian 或 ubuntu 的 /var/lock 是連結到 /run/lock,而 /run/lock 權限是 1777, 所以任何人都可以寫入,所以以一般使用者執行 gems 即可。
而 arch linux 的 /run/lock 755,因此只有 root 可以寫入,所以在底下 arch linux 中有用 sed 將 /var/lock/gems-server.6666 改到 /var/tmp/gems-server.6666,這樣就可以用一般使用者來執行。

arch linux 安裝:

由於 gems 並不在 arch 中,連 aur 也沒有,所以這裡提供 PKGBUILD,請自行編出並安裝。
產生 PKGBUILD 檔案

$ cat < PKGBUILD
# Author: Diego Essaya
# Author: Emiliano Castagnari (aka Torian)

pkgname=gems
pkgver=1.1.1
pkgrel=1
pkgdesc="The gems system is a client/server application that allows one to show a single console session in different computers or terminals in real time. "
arch=('any')
url="http://gforge.lug.fi.uba.ar/projects/gemsd/"
license=(GPL)
# because the homepage can not be reached, so grab source from debian.
source=(http://ftp.de.debian.org/debian/pool/main/g/gems/$pkgname"_"$pkgver.orig.tar.gz)

build() {
cd $srcdir/$pkgname-$pkgver/
sed -i 's/lock/tmp/' server/source/defaults.h
make PREFIX=/usr MANPATH=/usr/share/man
}

package() {
cd $srcdir/$pkgname-$pkgver/
make PREFIX=/usr MANPATH=$pkgdir/usr/share/man DESTDIR=$pkgdir install
}

md5sums=('1b4eb9b19c7c7bb570721354ffde74f7')
# vim:set ts=2 sw=2 et:
EOF

由於年代久遠,官方網站已連不上,所以原始碼是從 debian 那裡來。


以 PKGBUILD 來下載並編譯
$ makepkg

安裝打包好的 package
$ sudo pacman -U gems-1.1.1-1-any.pkg.tar.xz


使用:

 

伺服器端:

$ gems-server

gems-server 會 listen tcp port 6666,所以要開啟給客戶端連。
預設最多可同時25個 client 連線,可用 -maxconn 調整

結束 gems-server
於 gems-server session 中打指令 exit 或按鍵 ctrl-d 都可結束
也可直接使用 kill pid 的方式,從別的地方結束 gems-server
$ kill $(cat /var/tmp/gems-server.6666)

客戶端:

$ gems-client server-address

如果有如下錯誤:
gems-client: Terminal size too small (minimum required: 65x32).

使用 -i 參數來忽略終端機大小。
$ gems-client -i server-address

在任何時間按 ‘q’ 可結束客戶端程式。

gems 除了能傳送 console 及 terminal 外,也可用來即時傳輸其他資料,只要下 -noscript 參數即可。


註:gems 傳輸過程並沒有加密,使用上請注意,不要傳輸密碼或隱私資料。

沒有留言:

張貼留言