トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

ssh-agentが使えるmoshをインストールする

はじめに

moshはリモートサーバをメンテナンスするときには大変ありがたいソフトなのですが、いかんせんssh-agentをサポートしていないのが玉に傷。ところが、moshのissueをたんねんに読むと、#696で、ssh-agentのサポートを付けたmoshをつくった人がいてhttps://github.com/rinne/mosh/tree/agent-forwarding-merge-20151128 で、メンテナンスされていることに気づく。

pkgsrcのmoshは当然これではない。せっかくなので、ソースからこれを入れることにする。

この文書の対象はCentOS 6[1]。詳細は割愛するが、Debian Lennyでもインストールして動作はしている。

インストール

 はじめに

まず、autoconfとautomakeとlibtoolとcurlとncurses-develとopenssl-develをyumでインストールしておく。

次に、CentOS 6のPerlが古すぎでどうしようもないので、これは、pkgsrcでインストールしたPerlを最終使うことにした。もし、インストールしていないなら、pkgsrcから、lang/perl5と、devel/p5-IO-Ttyをインストールしておくとよい。(もちろん、pkgsrcを使わず、インストールしてもよい。)

 googletest

最初は、googletestのインストール。https://github.com/google/googletest/releases をみると、1.8.0が最新のリリースなので、それを使うことにした。tar ballの方をダウンロードして、展開。

展開後は、README.mdと、pkgsrcの情報をみながら、以下の通りに作業した。まずは、googletestの方から。

PATH情報をいじって、関係ないPATHを除外しておく。

 # export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin

GTEST_DIRを設定する。

 # export GTEST_DIR=/path/to/googletest-release-1.8.0/googletest
 # cd ${GTEST_DIR}

libgtest.aをつくる

 # g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
       -pthread -c ${GTEST_DIR}/src/gtest-all.cc
 # ar -rv libgtest.a gtest-all.o

libgtest_main.aをつくる

 # g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
       -pthread -c ${GTEST_DIR}/src/gtest_main.cc
 # ar -rv libgtest_main.a gtest_main.o

インストールする

 # test ! -d /usr/local/lib && mkdir /usr/local/lib
 # cp -v libgtest*.a /usr/local/lib
 # test ! -d /usr/local/include && mkdir /usr/local/include
 # cp -Rv include/gtest /usr/local/include

後はownerとパーミッションを確認しておくこと。(root:rootで、ディレクトリは755、ファイルは644。)

同じことを、googlemockの方でもやる。

PATH情報をいじって、関係ないPATHを除外しておく。

 # export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin

GTEST_DIRを設定する。(前で設定していたら、残っているはずなので、いらないはず。)

 # export GTEST_DIR=/path/to/googletest-release-1.8.0/googletest
 # cd ${GTEST_DIR}

autoreconfする

 # cd ${GTEST_DIR}
 # cd ../googlemock
 # autoreconf -fvi

GMOCK_DIRを設定する。

 # export GMOCK_DIR=/path/to/googletest-release-1.8.0/googlemock
 # cd ${GMOCK_DIR}

libgmock.aをつくる

 # g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
       -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \
       -pthread -c ${GTEST_DIR}/src/gtest-all.cc
 # g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
       -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \
       -pthread -c ${GMOCK_DIR}/src/gmock-all.cc
 # ar -rv libgmock.a gtest-all.o gmock-all.o

libgmock_main.aをつくる

 # g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
       -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \
       -pthread -c ${GMOCK_DIR}/src/gmock_main.cc
 # ar -rv libgmock_main.a gtest-all.o gmock_main.o

インストールする

 # cp -v libgmock*.a /usr/local/lib
 # cp -Rv include/gmock /usr/local/include

後はownerとパーミッションを確認しておくこと。(root:rootで、ディレクトリは755、ファイルは644。)

 protobuf

次は、protobufのインストール。https://github.com/google/protobuf/releases をみると、3.5.1が最新のリリースなので、それを使うことにした。protobuf-cppのtar ballの方をダウンロードして、展開。

展開後は、README.mdと、pkgsrcの情報をみながら、以下の通りに作業した。

PATH情報をいじって、関係ないPATHを除外しておく。

 # export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin

autogen.shする

 # cd /path/to/protobuf/
 # ./autogen.sh

configureする

 # ./configure --prefix=/usr/local

makeする

 # make

make checkする前に、以下の修正を行っておくとよい。(まったくwarningがでない状態にはならないので、ゆえに、make checkが通らないことは自明なので、以下のように、no-warningのテストだけ、除外しておく。

--- src/Makefile.orig	2018-01-27 06:18:32.000000000 +0900
+++ src/Makefile	2018-01-27 06:16:37.000000000 +0900
@@ -45,13 +45,12 @@
 check_PROGRAMS = protoc$(EXEEXT) protobuf-test$(EXEEXT) \
 	protobuf-lazy-descriptor-test$(EXEEXT) \
 	protobuf-lite-test$(EXEEXT) test_plugin$(EXEEXT) \
-	protobuf-lite-arena-test$(EXEEXT) no-warning-test$(EXEEXT) \
+	protobuf-lite-arena-test$(EXEEXT) \
 	$(am__EXEEXT_1)
 TESTS = protobuf-test$(EXEEXT) protobuf-lazy-descriptor-test$(EXEEXT) \
 	protobuf-lite-test$(EXEEXT) \
 	google/protobuf/compiler/zip_output_unittest.sh \
-	$(am__EXEEXT_2) protobuf-lite-arena-test$(EXEEXT) \
-	no-warning-test$(EXEEXT)
+	$(am__EXEEXT_2) protobuf-lite-arena-test$(EXEEXT)
 subdir = src
 DIST_COMMON = $(am__nobase_include_HEADERS_DIST) \
 	$(nobase_dist_proto_DATA) $(srcdir)/Makefile.am \

make checkする。(testは全部PASSするはず)

 # make check
 <snip>
 ==================
 All 6 tests passed
 ==================

インストールする

 # make install

ldconfigする。(ldconifg -pは確認。grepして、libprotoc.soがあることを確認しよう。

 # echo "/usr/local/lib" >> /etc/ld.so.conf
 # ldconfig
 # ldconfig -p

 mosh

まず、ソースを取ってきて用意する。gitにある最新を入れることにする。

展開後は、README.mdと、pkgsrcの情報をみながら、以下の通りに作業した。

PATH情報をいじって、関係ないPATHを除外しておく。

 # export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin

autogen.shする

 # cd /path/to/mosh/
 # ./autogen.sh

configureする。protobufが見つからないといわれるので、対策しておく。

 # export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
 # ./configure --prefix=/usr/local

makeする。perlが古すぎる問題がおきるので、ここで対策する。

 # export PATH=/opt/pkg/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin
 # make

make checkする。(testはPASSするはず)

 # make check
 <snip>
 =======================
 All 5 tests passed
 (24 tests were not run)
 =======================

インストールする

 # make install

終わった。まずは、リモートから、このサーバにmoshでloginしてみる。

各オプションの意味は、moshのmanを読むこと。

 % mosh --forward-agent --ssh="ssh -p 2222" --server=/usr/local/bin/mosh-server hoge.example.org

鍵認証でログイン出来たら、ssh-add -Lして、forward agentできているか確認しよう。

あとは、mosh対応サーバにログインしてみて、鍵認証ができてれば、OK!

  • [1]ちなみに、CentOS 6だと、pkgsrcのmoshはインストールできない。cmakeがmakeできないので。単純に普通のmoshがほしいひとは、EPELにあるのでそれをインストールするとよい。

間違いの指摘や、ご意見などは、FrontPageにある連絡先にメールを下さるとうれしいです。

最終更新時間:2018年06月04日 06時11分41秒