UEC Lifeを自動化するTips
これは工研新歓ブログリレー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などを使っている方は情報基盤センターのドキュメントを見てみてください!
- 認証に使うキーペアを生成
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
(公開鍵)が正しく生成されていることを確認しておきます。
- 公開鍵を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するのかぁってなりますよね。
これをまた手軽なコマンドで接続できるようにしましょう!
- 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.jp
をcosmos
に置き換えて公開鍵の登録まで行うとパスワードなしの1発で入れるようにできます。
また工研に入ればcosmosなどのサーバーやその上で動いているkc2(Koken Compute Cloud)が自由に使えます。
また、VSCodeを使えばsshを介して便利にGUIでテキストファイルの操作できるのですが、今回のような設定をすれば学内サーバーのような場合でも使えます。
3. 学内から学外のサーバーにアクセスしよう
さてここからは逆のパターンですがこっちがメインです。
基本的に学内のネットワークから学外に出るためにはSolを経由するかProxyサーバーを経由しなくてはいけません。ここではそれをいい感じに自動化してみましょう。
システムのプロキシ
Mac限定の話になってきてしまうのですが、Macにはネットワーク環境という設定があります。
使ったことがある人がいるかは不明なのですが、これを使うと環境ごとに異なるネットワーク設定をあらかじめ用意しておくことが可能です。これを利用して自動化します。
-
ネットワーク環境の作成
初めにネットワーク設定の部分から新しくUEC
という環境を作成してあげます。デフォルトの環境として自動
というものが用意されているので特に何もなければ普段はそれを使用しているはずです。
-
プロキシの設定
作成したネットワーク環境を選んで、Wi-Fiの詳細
からプロキシの設定をします。
各種設定は情報基盤センターのサイトを参照してください。
-
ネットワーク環境の切り替え
手動で行う場合は画面左上のりんごアイコンからネットワーク設定を変更できます。
正しくプロキシが通ることを確認してみましょう。
GitやNpmのプロキシ
上でやった設定はシステムのアプリには適用されますが、git
やnpm
などの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/airport
にairport
というコマンドがあり、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)
などが表示され切り替えが行われたことがわかります。
また、UECWireless
とAIA-Wireless
のみを追加しているので他に接続する学内Wi-Fiがあれば適宜追加してください。
おわりに
今回は色々とUECを自動化するTipsをお話してきました。新入生の方は今後のUEC Lifeの手助けになれば幸いです。また、工研のサーバーを触ってみたいと思った方などいれば是非工学研究部への入部もご検討ください(宣伝)。
参考サイト
#17 最高の学内無線LANにしようぜ by れい
Discussion