😎

UEC Lifeを自動化するTips

2022/04/13に公開

これは工研新歓ブログリレー2022の12日目の記事です。1日遅れてしまって申し訳ないです。
21のぼいどです。11日の記事はOtariidaeさんのねんねんころりよ 陰謀論者はいつ眠るでした。

さて、最近入学した皆さんは少なからずUEC Wirelessを使って授業を受講したりということがあったかと思います。使ってみていかがですか? プロキシの設定とか面倒くさくありませんでしたか?
その他にも、授業でSolにアクセスをしたこともあるのではないでしょうか?今後後期や2年生以降ではSolの他にもCedやIED含め様々な学内サーバーにアクセスする機会も増えてくるかと思います。
今回はそんな色々なUECでよく使う諸々を手軽に自動化してしまおうというTipsをいくつかお届けします。

1. Solに1発でアクセスしよう

普段Solにアクセスする場合にはおそらく

ssh -Y a2200000@sol.cc.uec.ac.jp

などでアクセスして、パスワードを入力することが多いと思います。毎回毎回パスワードを入力するのって面倒くさくありませんか? そこで公開鍵認証を使ってパスワード不要でアクセスできるようにしましょう。
ここではOpsnSSHユーザー向けの手順なのでTera Termなどを使っている方は情報基盤センターのドキュメントを見てみてください!

  1. 認証に使うキーペアを生成
    ssh-keygenコマンドを使ってKey-Pairを作成します。この時に保存場所やpassphraseが聞かれるのですがどちらもEnterを押してSkipしてもらって大丈夫です。
    Passphraseは合ったほうがセキュリティ的には良いですが、今回は手軽にというテーマなのでスキップしています。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/koichi/.ssh/id_rsa): [Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in test
Your public key has been saved in test.pub
The key fingerprint is:
SHA256:NqzdRN3M5HTAmrINh/XJroRRXJQXGb86FAmD4l3E8w4 koichi@k1hmbp-2.local
The key's randomart image is:
+---[RSA 3072]----+
|          += +*==|
|       . . =*B+oo|
|      . o o++B=o.|
|       o o=E+.= .|
|        S .Ooo . |
|       + +o +.o  |
|      . . .. +   |
|            . .  |
|                 |
+----[SHA256]-----+

ここで生成された鍵が~/.ssh/以下にあるので

$ ls ~/.ssh/
id_rsa id_rsa.pub

id_rsa(秘密鍵)とid_rsa.pub(公開鍵)が正しく生成されていることを確認しておきます。

  1. 公開鍵をSolに登録
    以下のコマンドを実行して公開鍵をSolに登録します。a2200000は自分のUECアカウント名に置き換えてください。
$ ssh-copy-id a2200000@sol.cc.uec.ac.jp

パスワードが聞かれるので入力すると登録が完了します。
5. ログインする

$ ssh a2200000@sol.cc.uec.ac.jp

を入力してSSHでログインしてみます。今度はパスワードの入力を求められず一発でログインできたと思います。

ただ、毎回ssh -Y a2200000@sol.cc.uec.ac.jpの長いコマンドを入力するのも面倒ですよね。
そこで、~/.ssh/configを作成して以下の内容を追加します。

Host sol
    HostName sol.cc.uec.ac.jp
    User a2200000
    ForwardX11Trusted yes

これでHostとしてSolが登録されたので、

$ ssh sol

と入力するだけでSolにアクセスすることができます!
ちなみに、この公開鍵認証はセキュリティ的にも良いので設定をおすすめします。
最近だと外部から接続できるサーバーの多くはこの公開鍵認証のみのアクセスに制限されているところも多いです。

2. 学外から学内のサーバーにアクセスしよう

さて、ここからは応用編です。1年生の前期であればSolしか使わないと思うのですが、後期でI類になるとCedという計算機システムを授業で使ったり、学内に設置してある工研のサーバー(Cosmosなど)に接続したいという場合もあると思います。

こういったサーバーは学外からは直接アクセスできなので基本的に、SolにログインしてからさらにCedなどの学内サーバーにSSHするという手法が授業などで紹介されるかと思いますが、これって面倒くさくないですか? さっきの手順でssh solで一発で繋げるようにしたのにまたSSHするのかぁってなりますよね。
これをまた手軽なコマンドで接続できるようにしましょう!

  1. configを追加する
    まずは、~/.ssh/configに設定を追加します。
    ここでは学内に設置してあるKokenのCosmosサーバーに接続してみるという場合でいきます。
Host sol
    HostName sol.cc.uec.ac.jp
    User a2200000
    ForwardX11Trusted yes
    
Host cosmos
    HostName cosmos.koken.club.uec.ac.jp
    User kokenuser
    ProxyCommand ssh sol -W %h:%p

ここで使用しているProxyCommandを使うことでSolを踏み台として学内のサーバーに接続することが可能になします。
2. 接続する
実際に接続してみます

$ ssh cosmos

アクセスするときはパスワードを聞かれるので入力してください。
この後は、1の手順3以降をa2200000@sol.cc.uec.ac.jpcosmosに置き換えて公開鍵の登録まで行うとパスワードなしの1発で入れるようにできます。
また工研に入ればcosmosなどのサーバーやその上で動いているkc2(Koken Compute Cloud)が自由に使えます。

また、VSCodeを使えばsshを介して便利にGUIでテキストファイルの操作できるのですが、今回のような設定をすれば学内サーバーのような場合でも使えます。

3. 学内から学外のサーバーにアクセスしよう

さてここからは逆のパターンですがこっちがメインです。
基本的に学内のネットワークから学外に出るためにはSolを経由するかProxyサーバーを経由しなくてはいけません。ここではそれをいい感じに自動化してみましょう。

システムのプロキシ

Mac限定の話になってきてしまうのですが、Macにはネットワーク環境という設定があります。
使ったことがある人がいるかは不明なのですが、これを使うと環境ごとに異なるネットワーク設定をあらかじめ用意しておくことが可能です。これを利用して自動化します。

  1. ネットワーク環境の作成
    初めにネットワーク設定の部分から新しくUECという環境を作成してあげます。デフォルトの環境として自動というものが用意されているので特に何もなければ普段はそれを使用しているはずです。

  2. プロキシの設定
    作成したネットワーク環境を選んで、Wi-Fiの詳細からプロキシの設定をします。
    各種設定は情報基盤センターのサイトを参照してください。

  3. ネットワーク環境の切り替え
    手動で行う場合は画面左上のりんごアイコンからネットワーク設定を変更できます。
    正しくプロキシが通ることを確認してみましょう。

GitやNpmのプロキシ

上でやった設定はシステムのアプリには適用されますが、gitnpmなどのCUI上のツールには適応されません。大学でも快適に使えるようにするためにこっちにもプロキシの設定をしましょう。
以下のコマンドでそれぞれにいい感じに設定してあげます。

export http_proxy=http://proxy.cc.uec.ac.jp:8080
export https_proxy=http://proxy.cc.uec.ac.jp:8080
export ALL_PROXY=http://proxy.cc.uec.ac.jp:8080
git config --global http.proxy ${http_proxy}
git config --global https.proxy ${https_proxy}
git config --global url."https://".insteadOf git://

ただし、大学外では以下のようにプロキシ設定を解除してあげないと使えません。

unset http_proxy
unset https_proxy
unset ALL_PROXY
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global --unset url."https://".insteadOf

SSH

大学学内から学内外のサーバーにアクセスするには一度Solを経由する必要があります。
大学にいながら自宅サーバーを管理したいEC2などのインスタンスに接続したいという人も多いと思うので、手軽にやってみましょう。

まずは大学用のsshのconfigを~/.ssh/uecに作成して次の内容を追加します。a2200000は各自のアカウント名に変更してください。

Include config

Host *
    User a2200000
    ProxyCommand ssh -W %h:%p sol

ここでは1行目にあるInclude configで既存の~/.ssh/configの設定を読み込んでいます。
その設定に対して、Host *を指定して全ての設定に対してProxyCommandを追加しているようなイメージです。

これの設定を実際に使ってSSHで接続してみます。これまでと同様に~/ssh/configにサーバーの情報を追加します。

~~~
Host aws
    HostName ec2-13-112-74-162.ap-northeast-1.compute.amazonaws.com
    User ubuntu
    IdentityFile ~/.ssh/aws.cer

ここでは学外にあるec2-13-112-74-162.ap-northeast-1.compute.amazonaws.comというAWSのサーバーを指定しています。公開鍵は別途用意してあるものを指定しています。

$ ssh -F ~/.ssh/uec aws

これで、接続することが可能です。

よし自動化だ!

さて、クライマックスです。ここまではそれぞれを個別に設定してきましたが、自動化しなくてはいけません。
学内にいるのか区別する方法ですが、ここは単純にWi-Fiの名前でやってみます。
Macの場合は/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airportairportというコマンドがあり、Iオプションを利用すると

     agrCtlRSSI: -51
     agrExtRSSI: 0
    agrCtlNoise: -87
    agrExtNoise: 0
          state: running
        op mode: station 
     lastTxRate: 286
        maxRate: 867
lastAssocStatus: 0
    802.11 auth: open
      link auth: wpa2-psk
          BSSID:
           SSID: UECWireless
            MCS: 11
  guardInterval: 800
            NSS: 2
        channel: 40,80

のようにWi-FIの情報を取得することができます。これに基づいて、ターミナルを開いたときに自動で切り替えを行うスクリプトを書いてみます。これを~/.zshrc~/.bashrcに追加しておきます。
スクリプトは参考にさせていただいたサイトのものを元に少し追加しています。

AIRPORT="/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport"
WIFI=` ${AIRPORT} -I |grep SSID|awk '{print $2}' | tr -d '\n'`
if test $WIFI = "UECWireless" -o $WIFI = "AIA-Wireless"; then
  # ネットワーク環境の切り替え
  /usr/sbin/scselect UEC 
  # Gitなどのプロキシ設定
  export http_proxy=http://proxy.cc.uec.ac.jp:8080
  export https_proxy=http://proxy.cc.uec.ac.jp:8080
  export ALL_PROXY=http://proxy.cc.uec.ac.jp:8080
  git config --global http.proxy ${http_proxy}
  git config --global https.proxy ${https_proxy}
  git config --global url."https://".insteadOf git://
  # sshの設定を切り替え
  alias ssh="ssh -F ~/.ssh/uec"
else
  # 設定を戻す
  /usr/sbin/scselect Automatic
  unset http_proxy
  unset https_proxy
  unset ALL_PROXY
  git config --global --unset http.proxy
  git config --global --unset https.proxy
  git config --global --unset url."https://".insteadOf
  unalias ssh 2> /dev/null
fi

毎回Terminalを起動すると接続しているWi-Fiに応じて

CurrentSet updated to DF3D95FE-AC17-482E-AC7C-D2D38D1EB073 (UEC)

などが表示され切り替えが行われたことがわかります。
また、UECWirelessAIA-Wirelessのみを追加しているので他に接続する学内Wi-Fiがあれば適宜追加してください。

おわりに

今回は色々とUECを自動化するTipsをお話してきました。新入生の方は今後のUEC Lifeの手助けになれば幸いです。また、工研のサーバーを触ってみたいと思った方などいれば是非工学研究部への入部もご検討ください(宣伝)。

参考サイト

#17 最高の学内無線LANにしようぜ by れい

Discussion