研究室でlinux系計算機を使用するときにやるべきこと:環境作り～接続まで

数値解析を行う研究室でリモートの計算機サーバとローカルのPCでデータのやり取りをするうえで知っておくべき環境設定や操作を備忘録的に残しておく。

# 環境設定
もし研究室で支給されるPCがWindowsの場合、計算機にローカルからアクセスするにはローカルのPCにlinux環境、あるいはsshクライアントがインストールされている必要がある。

## linux環境のインストール
使用するPCがWindows7,8の場合[Cygwin](https://cygwin.com/install.html)をインストールするのがよい。このときパッケージの選択においてopen-sshをインストールしておかないと、計算機へのssh接続ができないので要注意。またWindows10の場合、WSL(Windows Subsystem for linux)を 用いるほうが導入やパッケージの管理が簡単でよい。導入方法については[この記事](https://qiita.com/Aruneko/items/c79810b0b015bebf30bb)に詳しく書かれている。
## sshクライアントソフトのインストール
単に計算機サーバーに接続するなら[Teraterm](https://ja.osdn.net/projects/ttssh2/)をインストールしてしまうのが手っ取り早い。インストール時に下図のようにteratermマクロをttlファイルと関連づけておくと、後々teratermからのssh認証を自動化することができる。
## X serverのインストール
Windowsで計算機上のXwindowアプリケーションを表示するにはXサーバーをインストールする必要がある。ここでは[Vcxsrv](https://sourceforge.net/projects/vcxsrv/) をインストールすることにする。インストーラ―をダウンロードしたら、画面の指示に従いインストールを実行すると、デスクトップにXlaunchというショートカットが作成されるのでそれを実行すると設定画面が表示される。最後にsave configurationをして保存しておくと、次回からそれを用いることで設定をせずにvcxsrvを起動することができる。
![xsrv.PNG](https://qiita-image-store.s3.amazonaws.com/0/257782/82b7110d-f5d5-9d6a-8496-b33ac5b8558e.png)

###注意点
Xサーバが起動しているにも関わらず、計算機からXwindowが転送されないときは、WSLからサーバに接続している場合はローカルのターミナルの~/.bashrcに以下の環境変数を記述しておくとよい

```bash:.bashrc
export DISPLAY=localhost:0.0
```
またteratermから接続している場合は以下のように[設定]>[ssh転送]を開いて、「リモートのXアプリケーションをローカルのXサーバに表示する」にチェックを入れて、[設定]>[設定の保存]を行う必要がある。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/257782/feffc9b1-c128-f3e2-2909-ddcbd9dd2a53.png)

#ssh接続
##ローカルのターミナルから
```bash
ssh -Y <User>@<計算機のipアドレス>
```
<User>には計算機上の自分のアカウント名を入力する。
-YはXwindowをローカルのXサーバに転送するオプションである。
ただしこの方法だとログインの度にパスワード入力を求められて面倒なので公開鍵認証を使ったほうが便利である。

###公開鍵認証
ローカルのターミナルから以下のコマンドを実行すると、公開鍵(id_rsa.pub)と秘密鍵(id_rsa)が~/.ssh下に生成される。

```bash
ssh-keygen
(ssh-keygen.exe ※Cygwinの場合)
```
公開鍵(id_rsa.pub)の方を計算機上の~/.sshに移動し(ファイルの移動は次の回で)、以下のようにしてauthorized_keysファイルに公開鍵を登録する。

```bash:~/.ssh
cat id_rsa.pub >> authorized_keys
```
上記のコマンドで、もしauthorized_keysファイルが存在していなければ、新規にファイルが作成される。
この作業が終わるとローカルのターミナルから以下のコマンドでパスワード認証なしに計算機にログインすることができる。

```bash
ssh -i ~/.ssh/id_rsa 　-Y <User>@<計算機のipアドレス>　
```
-i で指定するパスはローカルの秘密鍵(id_rsa)のパスである。
このコマンドをローカルのaliasに登録しておくとコマンド入力の手間が省けて便利である。

```bash:~/.bashrc
alias myssh='ssh -i ~/.ssh/id_rsa -Y <User>@<計算機のipアドレス>'
```
##Tera Termから
Tera Termから接続する場合はTeratermを起動すると以下のウィンドウが表示されるので[ホスト]に<User>@<計算機のipアドレス>、[サービス]にSSHを選択してからOKを押すとパスワード認証が行われ、その後計算機にログインできる。
![teraterm.PNG](https://qiita-image-store.s3.amazonaws.com/0/257782/966a95e1-9a61-d61d-0c9b-2eb429db3452.png)

ただしこれもパスワード認証が面倒なので、TeraTermマクロの機能を用いて自動化する。
まずは以下のようなファイルを作成する

```text:sample.ttl
; sample macro of Tera Term
;
; File: ssh2login.ttl
; Description: auto login with SSH2 protocol
; Environment: generic
; Update: 2004/12/4
; Author: Yutaka Hirata

username = '<User>'
hostname = '<計算機のipアドレス>'
passwdfile = 'C:\Users\<ローカルのユーザー名>\.ssh\<passwd.dat>'
portnum = '22'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
getpassword passwdfile username userpasswd


msg = hostname
strconcat msg ':22 /ssh /auth=password /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg userpasswd
strconcat msg inputstr

connect msg
```
usernaem,hostnameにはそれぞれ計算機のユーザー名、ipアドレスに書き換えてください。passwdfileではローカルのPC上で計算機のパスワードを保存しておくファイルを指定しています。適宜場所を変えてください。またその保存先フォルダが存在していなければ事前に作成しておいてください。
このマクロファイルを作成後、Teratermでこのファイルを実行すると初回にパスワード認証が行われます。これに成功するとpasswdfileが作成され、次回からこのファイルをダブルクリックするだけで自動ログインすることができます。
なおパスワードに変更があった場合はpasswdfileで指定されるファイルを削除することでパスワードを更新することができます。

#まとめ
研究室配属当初、環境作りだけでなかなか苦労したのでこのような基本的なことでも残しておいた方がよいと思い、備忘録も兼ねて投稿しました。次回はlinuxのコマンド操作をまとめていきたいと思います。