SSHによる遠隔アクセス

遠隔アクセスとは、手元にあるコンピュータから、ネットワークにつながっている別のコンピュータを使用することである。ネットワークにつながっていれば、例え相手のコンピュータが地球の裏側にあろうとも使用することができる。

GUIで遠隔操作するには、相手のコンピュータの画面を転送して、逆に手元のコンピュータのマウスやキーボードによる入力を相手のコンピュータに通知しなければならない。この技術は既に存在していて(VNC: Virtual Network Computingなど)、現在のコンピュータの性能や通信速度なら十分に実用的となっている。

しかし、遠隔アクセスで行う作業はサーバ管理など、システムの基本部分を操作することが多い。そのためには設定ファイルの編集やファイル操作、基本的なプログラムの停止や起動といったように、大半はコマンド操作で十分である。

UNIX系OSはコンピュータネットワークを利用する機能を古くから備えており、古くはtelnetやrloginといったコマンドが使われていた。しかし、これらのコマンドは通信が暗号化されていないため(ログインパスワードですら平文で通信していた)、現在は使うべきではない。

代わりに、通信が暗号化されたSSH (Secure Shell)を使う。試しに本学情報センターが提供するLinuxサーバcc2000 (cc2000.kyoto-su.ac.jp)を使ってみる。

cc2000について

cc2000は学外からもアクセス可能なコンピュータとして設定されている。OSはUbuntu Linuxで、コマンドは基本的にはmacOSと同じである。日本語の文字コードもUTF-8に設定されているので特に問題がないだろう(別の文字コードのファイルを扱う時には問題になるが)。情報センター備え付けのパソコンの個人データはcc2000からも使うことができるので、例えば自宅から大学のコンピュータにファイルを転送するといった使い方ができる(大学でも自分のMacを使う諸君にとってはほとんど有り難くないかもしれない……)。

2017年4月より、学外からcc2000に遠隔アクセスするためには公開鍵認証を使用する必要がある。このための設定についてはこちらの「公開鍵認証を用いたSSH接続」で説明されている。必要ならば自分で設定すること。学内から遠隔アクセスする分には設定は不要である。

sshコマンドの使い方

SSHで遠隔ログインするためのコマンドsshの使い方は次のとおりである:

ssh ユーザ名@ホスト名

ユーザ名とは、遠隔ログインするコンピュータ上のユーザアカウントである。学内のコンピュータのアカウントはPOSTやActiveMailのアカウントと同じであり、入学時に「g2学生証番号」の形式で全員与えられている※。例えば学生証番号が12345ならg212345となる。

※先頭の2桁は入学年度の西暦の下2桁である。2019年以前の入学者はg1xxxxxとなる。

ホスト名とは、遠隔ログインしたいコンピュータの名前で、学内(ローカルネットワーク内)で使う場合はコンピュータ名のみでもよい。学外からなどでは世界中のどこのcc2000か分からないとどうしようもないので、cc2000.kyoto-su.ac.jpとドメイン名付きで指定する。

例えばユーザ名がg123456の人が、cc2000.kyoto-su.ac.jpに遠隔ログインするコマンドは次のようになる:

% ssh g123456@cc2000.kyoto-su.ac.jp

学内からならばドメイン名は省略して次のコマンドでもよい:

% ssh g123456@cc2000

指定したコンピュータに初めて接続する場合(正確には、指定したコンピュータに対応するIPアドレスに初めてアクセスする場合)、次のようなメッセージが表示される。

The authenticity of host 'cc2000 (133.101.87.241)' can't be established.
RSA key fingerprint is 0a:8f:d7:86:4c:d6:ab:73:47:9b:25:e9:49:cd:3a:9e.
Are you sure you want to continue connecting (yes/no)? 

これは、初めて接続するので電子指紋(fingerprint)を記録して続けてよいか?という問い合わせである。本当に初めてアクセスしている場合は構わないのでyesとキーボードでタイプしてReturnキーをタイプする

たまにマウスでyesをクリックする人を見かけるが、ターミナルではキーボードしか使えないことに注意。

なお、初めてではないのにこのようなメッセージが出た場合は注意が必要である。「指紋が異なる」ので前回と違うコンピュータにアクセスしようとしている可能性がある。偽装されたコンピュータかもしれない。同じコンピュータでもIPアドレスが変わるとこのメッセージが出る。理由がわかっていれば問題無いが、分からなければnoとタイプして接続しない方がよいだろう。

yesと答えると、次のようなメッセージが表示される:

Warning: Permanently added 'cc2000' (RSA) to the list of known hosts.
g123456@cc2000's password: 

パスワードを聞いてくるので、cc環境のパスワード(moodleなどの学内システムと同じもの)を入力する。パスワード入力時にはキー入力が英数モードになっていることを確認すること。また、sshではパスワードを入力しても画面上に反応がない(●とか*すら表示されない)ので気にせず、間違わないように入力する。パスワードを入力したらReturnキーをタイプする。間違っていたらパスワードを再度問い合わせてくるが、5分以内に5回連続で間違えると10分間程度は遠隔ログインが一切拒否されるようになるので注意して入力するように。

ログインに成功すると次のようなメッセージとプロンプトが表示される。あとは手元のターミナルと同様に、コマンド操作を行うことができる。

Last login: Mon Mar 23 16:19:20 2015 from hogehoge.cse.kyoto-su.ac.jp
  --------------------------------------------------------------------
   [トラブルは10号館3階情報センターカウンターにお越しいただくか、
                                       内線2578までお願いします。]

                         情報センター(info-cc@cc.kyoto-su.ac.jp)
  --------------------------------------------------------------------
g123456@cc2002:~$ 

1行目は、最後にログインした時刻である。身に覚えの無い時刻にログインしている場合、誰かが勝手に使っていた可能性があるので情報センターに問い合わせること。日本語のメッセージが文字化けして読めない場合は、ターミナルの文字コード設定がUTF-8になっていない可能性が高い。最後のプロンプトは、「ユーザ名@コンピュータ名:カレントディレクトリ$」という書式で表示されている。cc2002となっているが、これはcc2000の実体がcc2001とcc2002となっていて、プロンプトでは実体のコンピュータ名が表示されるからである。

SSH接続の切断

作業が終わったらSSH接続を切断する必要がある。切断は次のコマンドを実行する:

exit (またはlogout)

接続したまま放置するとサーバに負担がかかるし、自分のファイルを壊すなどのトラブルも起きかねない。必ず最後は実行していたプロセス(プログラム)が残っていないことを確認して、切断しておくこと。

遠隔操作上の注意

サーバは多くの教員や学生が共同で使用しているので、負荷の高いソフトウェアの実行は控えること。自作プログラムで大量のメモリを使ったり計算処理を行ったりしかねないので、プログラムの強制終了などの対処法は必ず覚えておこう。

(おまけ)遠隔コピー

sshを紹介したついでに、ネットワーク間でファイルをコピーする簡易コマンドを紹介しておく。

scpコマンドはcpコマンドのネットワーク対応版である。sはsecure(「安全な」という意味)で、暗号化して転送するのでネットワーク越しでも安全、という意味。

基本的な使い方はcpコマンドと同様で、転送元のファイル名と転送先のファイル名を指定するが、リモートホスト(自分が使っているコンピュータではなく、ネットワークで繋がっている別のコンピュータ)を指定できるのが最大の違いとなる。

scp [コピー元のファイル名] [ユーザ名]@[ホスト名]:[コピー先のファイル名(またはディレクトリ名)]

例えば、カレントディレクトリにあるindex.htmlというファイルをcc2000.kyoto-su.ac.jpというアドレスのコンピュータの、自分(仮にg123456というユーザID)のホームディレクトリ下にあるpublic_htmlディレクトリにコピーしたい場合、次のようなコマンドになる:

% scp index.html g123456@cc2000.kyoto-su.ac.jp:public_html/

コピー先の指定方法は少々複雑である。:から後ろのファイル名は省略可能で、省略した場合はホームディレクトリにコピーされる。ファイル名を指定した場合やディレクトリ名を指定した場合の挙動はcpコマンドやmvコマンドと同じである。

これでReturnキーをタイプすると

g123456@cc2000.kyoto-su.ac.jp's password:

と、cc2000.kyoto-su.ac.jpでのパスワードを聞いてくるのでパスワードを入力する。sshと同じく、パスワード入力時には何も表示されないので注意。正しく入力されていれば、Returnをタイプした後にコピー状況のメッセージが表示され、プロンプトが戻ってくればコピー成功である。

ディレクトリごとコピーしたい場合は-rオプションを使う。例えば、カレントディレクトリにpublic_htmlというディレクトリがあってその中にあるファイルやディレクトリを全部、cc2000.kyoto-su.ac.jp上の自分のホームディレクトリにあるpublic_htmlにコピーしたい場合は、

% scp -r ~/public_html/ g123456@cc2000.kyoto-su.ac.jp:

とできる。

cpコマンドと同様に、コピー先に既に同じ名前のファイルが存在していても確認をせず上書きしてしまうので、注意すること。

接続先のコンピュータから手元のコンピュータにファイルをコピーする場合も同様で、コピー元のファイル名をユーザ名とホスト名を付けて指定することになる:

scp [ユーザ名]@[ホスト名]:[コピー元のファイル名] [コピー先のファイル名]

その他の遠隔コピー方法

scpコマンドの他、対話的にファイル転送を行うsftpなどのコマンドがある。また、GUIで操作できるアプリケーションもある。