PCとサーバ間のファイル転送

この頁ではPCとサーバ間でのファイル転送の方法を説明します。 その前段階として必要な、サーバに設定されている初期パスワードの変更方法についても説明します。 背景となる知識や周辺情報、特にセキュリティに関連する説明を併せてしていますので説明が長めです。具体的な操作方法については青字の部分になります。

一般にサーバ側でどのような転送方法をサポートしているかによって転送方法は変わって来ます。 ここではssh(secure shell)によるリモートログインとファイル転送の場合を扱います。 両者ともに通信内容は暗号化され、傍受されたとしても現状既知の技術ではパスワード等を知らない第三者による復号化はできません(セキュリティホールがある場合を除く)。

リモートのサーバに接続する

PCのOSがWindows10の場合、PCにubuntu on WindowsをWindows storeからインストールすれば、 後述のLinux系OSの場合と同じ方法でPCからサーバにログインすることができます。 また同様にファイルを転送することが可能です。 しかしOSの管理者権限がなく、なおかつubuntu on Windowsがインストールされていない場合にはそうはいきません。 そのような場合にはWindows用のsshクライアントやファイル転送のソフトウェアを管理者権限でインストールすることもできません。 代替方法としては、ダウンロードしてファイルを解凍すればインストールなしで動作する、そういったソフトウェアを利用することが考えられます。 いわゆるポータブルタイプのソフトウェアの利用となります。 但しこの場合、注意すべきなのはダウンロードして来たファイルの安全性です。 それらのファイルを実行することになりますので、信頼性の高いサイトからダウンロードし、ウィルスチェックを行うようにします。 普段利用しているPCで例えば銀行振込やネット通販でクレジットカード利用を行なっているなど安全を期したい状況なら、 セキュリティレベルが少し低くなっても構わないPCを用意してそちらを使ったり、 一般ユーザを別に作ってそちらでダウンロードと実行を行うなどすることを検討して見てもよいかもしれません。 これらの場合でもネットワーク中の他のサーバやPCのファイアウォールを含めた設定や、 当該PCのファイルの権限を含めた設定が正しくなされている必要があります(教育用システムではそうなっていることが期待されます)。 以上のような検討は、もちろん管理者権限があってポータブルタイプではないソフトウェアを通常通りインストールする場合にも必要です。

sshによるリモートログイン

ssh(secure shell)というのは リモートログイン(説明はtelnetのそれを参照)するためのプロトコルです。 同時にそれを使ってリモートログインするような、Linux系を含めてunix系OS(Mac OS Xでも)のコマンド名でもあります。 sshにはウェルノウンポート番号22が割り当てられています。 Linux系OSとMac OS Xでは仮想端末でsshコマンドを利用してリモートログインすることが可能です。 Windows10でもubuntu on Windowsをインストールするか、その他のunix模倣ソフトウェアをインストールすれば利用できます。 但しそれらのインストールには管理者権限が必要になったりする場合があるため、 ここではポータブル版のTera Termによる方法を説明します。

Tera Term

Tera Termは古くからあるフリーソフトウェアであり、 元々はシリアル通信やTCP/IPtelnet(ウェルノウンポート番号23)というプロトコルでリモートログインするためのソフトウェアでした。 Telnet(プロトコル名であるとと共にコマンド名でもある)によるリモートログインはパスワードを含めて暗号化を行わずに通信するため、 専ら研究者達にInternetが使われていた時代の後では危険なためほとんど使われなくなっています (但しtelnetコマンド自体は任意のIPアドレスの任意のポート番号を指定してTCPによる通信を試みることができるため、各種チェック等に使われます)。 現在のTera Termはssh、 ウェルノウンポート番号22)という暗号化リモートログインをサポートしています。 またポータブルなもの(Windowsの通常のインストール手順に従わなくても動作させられるタイプのソフトウェア)もあり、 管理者権限がなくても、ダウンロード等が可能なら利用することができます。

但しポータブルかどうか、Tera Termを利用するかどうかによらず、 リモートログインを行う場合には利用時の物理的環境、クライアントPCのOSとその設定、クライアントのソフトウェア、通信、サーバ側が安全である必要があります。 そうでないとパスワード等が漏洩する可能性があるからです。 ポータブルなものを含めてtelnetはいうに及ばすネットカフェなどのPCやきちんと管理していない人のPCでsshのクライアントを使うのは危険な場合が結構ありえる、ということです。

ホテル等のwifiや公共wifiにより安全な持ち込みPCを使ってsshのクライアントからリモートログインする場合は遥かに安全です。 PCの設定が正しいのに加えてセキュリティホールを突かれず、 認証と暗号化のキー等に通常使われているレベルのものを利用すれば、 通信データを傍受されても内容を通常は解析できないと考えられます(文字数等のある程度の推測は可能だと考えられます。 将来量子計算機等が実用化され、それまでデータを取っておいて解析する場合にも解析が可能かもしれません。 またNSAやCIA等の情報機関が本気で解析にかかった場合には現在でも別かもしれませんが、 そこまで重要な情報であれば通信方法として何を使うかから検討の必要があると考えられます)。 但しサーバのなりすまし攻撃と、撮影等によるキー入力の取得には注意が必要です。

ポータブル版Tera Term

Tera Termにはポータブル版があり、これを利用すれば管理者権限がなくてもネットからのダウンロードができればTera TermをWindowsで利用することが可能です。 冒頭のTera Termの公式ページがありますし、 窓の杜のTera Termの頁にもリンクがあります。 これらのサイトにポータブル版があればダウンロードし、解凍します。

利用方法はかなり以前のマニュアルがありますし、 検索しても説明が多数見つかります。 なおTera Termを使う場合に限らず、リモートログインする場合にはサーバのドメイン名 あるいは[IPアドレス](https://ja.wikipedia.org/wiki/IPアドレス)に加え、ポート番号が必要です。 もちろん認証情報(ログインIDとパスワードのペアの場合もありえる)も必要です。 これはファイル転送を行う場合にも同じです。 ドメイン名あるいはIPアドレス、ポート番号はサーバの管理者等に教えてもらう必要があります。

簡単に利用法を記しておきます。 Tera Termを起動し、 接続方法としてTCP/IPのチェックを入れ、 「ホスト」に接続先のドメイン名あるいはIPアドレス、 「TCPポート#」に指定されたポート番号を記入します。 「サービス」としてSSH、「SSHのバージョン」はSSH2を選択します。 「OK」をクリックすると、接続を開始します。 サーバ側とうまく接続できると、初回接続の場合、 「セキュリティ警告」としてサーバのホスト鍵の情報が表示されます。 「このホストをknown hostリストに追加する」がチェックしてあると、問題がない場合、2回目以降はセキュリティ警告は表示されません。 もちろん2回目以降にサーバ側がなりすましである可能性がある場合(初回追加されたホスト鍵と異なる場合)には警告されます。 うまく接続できない場合にはサーバのドメイン名またはIPアドレス、ポート番号のいずれかが間違っているか、 サーバがダウンしているか、サーバまでの通信ができないか、Tera TermやOSが(ファイルとして)壊れているかのいずれかとなります。

「続行」をクリックするとSSH認証のウィンドウが表示されるので「ユーザ名」にログインID、 「パスフレーズ」にパスワード等を記入します。 認証方法を選んで「OK」をクリックしてください。 認証方法はサーバによって利用できるものが異なります。 うまく認証が通ればログアウトするまでリモートのLinuxマシンの仮想端末として動作します。 ログアウトするにはlogoutコマンドを入力するか、Tera Termのウィンドウを消せばよいでしょう。

パスワード等の変更方法

認証方法としてプレーンパスワード(パスワードの文字列そのものによる認証)を利用している場合、 初回ログイン時に初期パスワードを他のものに変更するよう指定されている場合が多いです。 そのような場合には、例えば以下のようなコマンドでパスワードの変更を行える場合が多いです(類似の他コマンドの場合もあります)。 操作方法はTera Term以外のsshクライアントソフトウェアを用いている場合にも同じです。

$ passwd

プロンプト$の部分はサーバによって異なります。 現在のパスワードと、変更後のパスワードを2回尋ねてくるので入力します。 パスワード等の入力時に各キー入力に対し*をエコーする(入力に対して反応を示すこと)Windowsの場合と異なりLinux系のOSがサーバで用いられていると何もエコーしないので注意してください。 パスワードを変更したら一旦ログアウトして再ログインし、 意図通り変更されたことを確認します。

なおプレーンパスワードによる認証は実際にはセキュリティホールになりかねないので何らかの特殊な事情と安全性の考察がない限り使われることはありません。

組織外からsshで接続する場合の注意点

組織内のPCやwifiから組織内のサーバに接続する場合には上記方法で問題ない場合が多いです。 ところが組織外から接続する場合には、ファイアウォールによってクライアントPCとサーバ間の通信が阻止されている場合があります。こういった場合にはVPN接続を行う必要があります。 例えば京都大学の場合、学外からの接続を参照してください。 もちろんファイル転送の場合にも同じことをする必要があります。

PuTTY

PuTTYはWindows用のsshクライアントであり、フリーソフトウェアです。 インストール方法と利用方法についてかなり古めですがKUINSニュースの解説記事があります。 但し時間の関係で、ポータブル版の信頼性を(Tera Termと同程度に)確認できなかったため、ここには記さないことにします。 もちろんこれは全く著者の時間の都合の問題であって、存在しているポータブル版には安全なものがあると考えられます。 書き方によっては提供されている方々の名誉にも関わる可能性があることでもあり、誤解のないような書き方をしました。 自分でポータブル版の安全性の確認が十分できた場合にはこの限りではないということになります。 確認できた場合には理由とともに教えていただけると幸いです。 また将来的には通常版が教育環境等にインストールされるようになる可能性もあります。

利用する場合、接続後については上記Tera Termの場合と同様になります。

scp等によるファイル転送

scpというのは元々はunux系のOSでのコマンド名で、sshプロトコルを用いてファイル転送を行うプログラムです。 相手側でsshサーバのプログラムが動いていれば基本的に利用できる場合がほとんどです。 Linux系のOSやMac OS Xの場合には、仮想端末でscpというコマンドを利用することが可能です。 Windowsでもubuntu on Windowsや他のunix模倣ソフトウェアが動作している場合には、同様に利用することが可能です。 しかしそれらを利用(インストール)するには管理者権限が必要な場合もあるので、 以下ではWinSCPのポータブル版を利用する方法について記します(とは言ってもほとんどリンクのみです)。

なお、Linux系OSを利用している場合、scpよりもrsyncの方が高機能に利用できる場合が多いです。

WinSCP

WinSCPはscpコマンドと同様の機能をGUIで行えるWindows用のフリーソフトウェアです。公式サイトのダウンロードの頁にポータブル版もあります。 インストール方法と利用方法についてかなり古めですがKUINSニュースの解説記事があります。 但しポータブル版の場合にはセットアップの少なくとも一部は必要ないでしょう。

ファイルの転送先のディレクトリ(フォルダ)

ファイル転送を行う場合、アップロード先のサーバが正しくても、ファイルの置き場所(ディレクトリ、あるいはWindows等の場合にはフォルダともいう)が正しくないとうまく動作しません。 特にWebサーバの場合にはアクセス時のURLとHTMLファイル等を置いた場所が対応することになります。 またダウンロードするときにはファイルが置いてあるサーバ内の場所がわからないとファイルを指定できません。

以下ではwebサーバにHTMLファイルを置く場合を例に取って説明します。

例えばあるwebサーバの場合、HTMLファイルを置くディレクトリとそのアクセス時に指定するURLの対応関係は以下のものになります。

~/public_html/ドメイン名/ファイルへの相対パス

http://ドメイン名:ポート番号/user-string/ファイルへの相対パス

これらのうちドメイン名、ファイルへの相対パス、ポート番号、user-stringはユーザーごとに異なる変数で、実際には別の文字列を代入します。 サーバによっては対応の仕方が上と異なる場合があります。 またアップロード先のサーバのドメイン名(あるいはIPアドレス)と、 URLのドメイン名(あるいはIPアドレス)が異なる場合もあり得ます。 ファイルをアップロードするサーバの「ドメイン名」と「user-string」、初期パスワード等の認証情報はサーバ管理者が教えてくれます。 Webサーバの「ドメイン名」、「ポート番号」、アップロード時のファイルのパスとURL中のファイルへの相対パスの対応関係もサーバ管理者が教えてくれます。 但し「ファイルへの相対パス」は自分で決めます。 ~はuserIDの人のホームディレクトリ(通常ログイン時のディレクトリと等しい)を表し、具体的なそれのパスはユーザごとに異なります。 ポート番号がHTTPのウェルノウンポート番号である80の場合にはURL中の:80の部分を省略することができます。

例えば~/public_html/ドメイン名/index.htmlというファイルを作った場合、 http://ドメイン名:ポート番号/user-string/index.htmlというURLによりそのファイルを、アクセス可能なwebクライアントから参照できます(user-stringには管理はから教えてもらった文字列で置き換える)。 但しファイルのアクセス許可(コマンドls -lで表示される)が正しくないとクライアントからはアクセスできません。

$ ls -l

-rw-rw-r-- 1 userID groupID ファイルサイズ ファイル作成時 ファイル名

具体的には一番左側にあるアクセス許可の8文字目のr(所有者やユーザグループ以外のユーザが読み取れる許可)がないと、webサービスを行なっているサーバプログラムがファイルにアクセスできません。 アクセス許可を変更するにはchmodというコマンドを利用します。以下は使用例です。

$ chmod o+r ファイル名 # その他のユーザに読み取り許可を与える(最初の#から右側はコメント)

変更したらlsコマンドで意図通りになったか確認します。 またファイルに至るまでのパス中の各ディレクトリのアクセス許可(o+x)も必要ですがここでは説明を省略します。 アップロード後にはwebクライアントに意図したURLを打ち込んで、webサーバにアクセスして意図通り表示されるかを確認する必要があります。

通信可能なwebクライアントからアクセスできない場合、 よくあるミスはファイルの置き場所の間違いや、画像ファイルのアップロード忘れ、アクセス権限の間違いなどです。 なおファイル名(ファイルへの相対パス)は全て半角英数字(+ASCIIの範囲で許されている若干の文字)の範囲にしておく方が無難です。