SSHによる接続

SSHを用いたリモートログイン_

ある計算機から別の計算機へネットワーク(LAN, インターネット, 電話回線など)を介してログインすることをリモートログインという。

ログイン先のマシンのことを「サーバー」、ログインに使うマシンのことを「クライアント(マシン)」あるいは「ローカル(マシン)」という。SSHでは、クライアントとサーバー間の通信路を暗号化してデータを送る。このため、telnetやrloginでは平文で送られていたパスワードが暗号化された通信路を通るので比較的安全である。

さらに、公開鍵暗号方式を利用することで通信路にログインパスワードを流すことなくログインできるので、より安全である。

Linux/Unix/Mac OSの場合_

Mac OSはVersion 10から、内部がUnixになっているので、Unixのコマンドがそのまま使える。

クライアント側の処理_

ターミナル(Unixコマンドを使えるウィンドウ)を立ち上げる。まず、公開鍵と秘密鍵のペアを作成する。パスフレーズの入力を求められるので、パスフレーズを入力する。パスフレーズはログインパスワードと異なるものの方が良い。パスフレーズを設定しておくことで、秘密鍵を盗まれてもパスフレーズが分からない限り利用されない。

% cd
% ssh-keygen -t rsa

.ssh以下にid_rsa, id_rsa.pubができているので、id_rsa.pubをサーバに何らかの手段で持っていく。今回の場合は、scpコマンドを使って直接持っていく。

% cd .ssh
% scp id_rsa.pub USERNAME@サーバーのFQDN:

USERNAMEはログイン名に置き換える。サーバーのFQDNはサーバーのホスト名+ドメイン名のこと。パスワードの入力が求められるのでパスワードを入力する。これで、id_rsa.pubがサーバーに転送できた。

サーバー側の処理_

サーバにおいて、.ssh/authorized_keysに持っていったid_rsa.pubを付け加える。まず、サーバーにログインする。

% ssh USERNAME@サーバーのFQDN

パスワードの入力が求められるので、ログインパスワードを入力する。

サーバーにログインをしたら、公開鍵を設置するためのディレクトリを作成し、公開鍵を登録する。多くの Linux/Unix/Mac OSはOpenSSHというソフトウェアを用いて、SSHログインを実現している。OpenSSHでは、~/.ssh以下に個々人の公開鍵を登録することになっている。

% cd
% mkdir .ssh
% chmod 700 .ssh
% cat id_rsa.pub >> ~/.ssh/authorized_keys
% chmod 600 .ssh/authorized_keys
% rm id_rsa.pub

一度ログアウトし、もう一度、ログインしてみる。今度は、パスフレーズでログインできる。

% ssh USERNAME@サーバーのFQDN

SSHとSCPのコマンド_

SSHは以下のコマンドでログインできる。

% ssh username@サーバーのFQDN

SCPは以下のコマンドでファイルの受け渡しをできる

  • ローカル→サーバー
    % scp ファイル名 username@サーバーのFQDN:ホームディレクトリの下のパス
    
  • サーバー→ローカル
    % scp username@サーバーのFQDN:ホームディレクトリの下のパス/ファイル名 クライアントのパス
    
  • ディレクトリの中身を再帰的にコピー
    % scp -r ディレクトリ名 username@サーバーのFQDN:ホームディレクトリの下のパス
    % scp -r username@サーバーのFQDN:ホームディレクトリの下のパス .
    

Windowsの場合_

注意_

例はWindows 7における例ですが、Windows 8でもほぼ同様です。

SSHを用いてリモートログインをするためのツールPutty、SSHを用いてファイルをアップロード/ダウンロードするソフトウェアWinSCPをインストールする。

Puttyのインストール_

Puttyをダウンロードする。ダウンロードのページから、64-bit x86のputty.zipをダウンロードする。

ダウンロードしたZIPファイルを解凍し、Cドライブの直下に置く。すなわち、C:\putty とする。

公開鍵と秘密鍵の作成_

C:\putty\PUTTYGEN.EXE をダブルクリックする。

「Type of key to generate」の項で「Ed25519」を選択し、「Generate」をクリックする。すると、公開鍵と秘密鍵の作成が始まる。カーソルを自由に動かすと青のゲージがどんどん増えていく(下図参照)

青のゲージが右端まで行くと下図のようになる。「Key pathphrase」と「Confirm pathphrase」にパスフレーズを入力する。パスフレーズはログインパスワードと異なるものの方が良い。パスフレーズを設定しておくことで、秘密鍵を盗まれてもパスフレーズが分からない限り利用されない。

次に「Save public key」をクリックし、公開鍵を保存する。ファイル名は「public.key」とし、C:\putty に保存する(C:\putty\public.key)。

次に「Save private key」をクリックし、秘密鍵を保存する。ファイル名は「secret.ppk」とし、C:\putty に保存する(C:\putty\secret.ppk)。

Puttyでのログイン(接続先の設定)_

PUTTY.EXEがPuttyの本体。C:\putty\PUTTY.EXE をダブルクリックする。サーバーのFQDNをserver.domain.jpとする。

接続先を保存しておくと二回目以降のログインが楽になるので接続先を設定する。左側の「Session」タブをクリックする(下図参照)。

  • Host Name:接続先のサーバーのFQDNを入力する。
  • Saved Sessions:保存名を入れる。

その後、「Save」をクリックし、ここまでの作業を保存する。

「Connection」→「Data」をクリックする(下図参照)。「Auto login username」でログイン名を入力する。

これで設定完了。「Session」をクリックし、「Save」を押して、現在までの作業を保存する(下図参照)。

パスワードを用いたログイン_

パスワードを使ってサーバーにログインする。「Session」をクリックする(下図参照)。そして、「Saved sessions」から「server」を選択する。次に「Load」ボタンをクリックする。

その後、「Open」ボタンをクリックすると接続が始まる。

接続先のサーバーに初めてアクセスしたときに、以下のような警告ウィンドウが出る(ただし、英語版)。これは、アクセス先のサーバーが本当に自分が接続したいサーバーであるかどうかの確認をしている。本来は、ちゃんとfinger print(サーバーの指紋)を別紙に印刷したものと照らし合わせて正確であることを確認して「Yes」を押さないといけない。が、今回は正しいと信じることとし、「Yes」をクリックする。

すると、以下のようなターミナルが起動する。パスワードの入力が求められているので、サーバーのパスワードを入力する。

ログアウトするときには、exitコマンドを入力する。

% exit

フォントと文字コードの設定_

このままだと、日本語メッセージが文字化けしてしまい読めない。そこで、フォントと文字コードの設定をする。Puttyを立ち上げ、「Windows」→「Appearance」をクリックする(下図参照)。そして、「Change ...」ボタンをクリックする。

するとフォントの選択画面になるので、お好みのフォントおよびフォントサイズを選ぶ。また、文字セットを日本語にする。

「Windows」→「Translation」をクリックする(下図参照)。そして、「Remote character set」にてサーバの文字コードを指定する。

これで設定完了。「Session」をクリックし、「Save」を押して、現在までの作業を保存する(下図参照)。

WinSCPのインストール_

SSHを使ってファイルをサーバーとやり取りするためにWinSCPというソフトウェアをインストールする。

WinSCPの公式ページよりWinSCPをダウンロードする。ダウンロードのページから、Installation package をクリックし、ダウンロードする。

ダウンロードした winscpXXXsetup.exe (XXXは数字3桁)をダブルクリックし、インストールを始める。

  • 使用言語を「日本語」
  • セットアップ方式は「標準的なインストール」を選択する
  • インターフェーススタイルは「コマンダーインターフェース」を選択する

WinSCPで接続先を設定する_

Puttyと同様に接続先を設定し、保存する。WinSCPを起動すると下図のウィンドウが立ち上がる。

それぞれの情報を設定する。

  • ホスト名: server.domain.jp
  • ユーザー名: ログイン名
  • パスワード: ログインパスワード

以上を入力したら「保存」ボタンを押す。そうすると下図のようなウィンドウになる。

そのまま「OK」ボタンを押す。

「ログイン」ボタンを押し、ログインする。

初めて接続先のサーバーにアクセスすると以下の警告メッセージがでる。Puttyのときと同様に本来ならば、ちゃんとfinger printが正しいかどうかを確認する必要がある。今回は、正しいものと信じて「はい」を押す。

パスワードを入力し、ログインする。

ちゃんと接続できると下図のようなウィンドウが開く。左側がローカル(自分のノートPC)にあるファイル。右側がサーバーにあるファイル。ドラッグ&ドロップでファイルをアップロード、ダウンロードできる。

公開鍵の設置_

SSHを用いたログインはパスワードによるログインと公開鍵を用いたログインの2種類が用意されている。パスワードによるログインに比べて、公開鍵を用いたログインの方が安全であるので、可能な限り公開鍵を用いたログインを用いるべきである。そこで、公開鍵を用いたログインをできるようにPuttyとWinSCPの設定をする。

まず、WinSCPで公開鍵(秘密鍵と間違えないように!) C:\putty\public.key をサーバーにアップロードする。

次にPuttyでサーバーにログインする。

ログインをしたら、公開鍵を設置するためのディレクトリを作成し、公開鍵を登録する。多くのLinux/UnixサーバーはOpenSSHというソフトウェアを用いて、SSHログインを実現している。OpenSSHでは、~/.ssh以下に公開鍵を登録することになっている。

% cd
% mkdir .ssh
% chmod 700 .ssh
% ssh-keygen -i -f public.key >> ~/.ssh/authorized_keys
% chmod 600 .ssh/authorized_keys
% rm public.key

一度、ログアウトする。

% exit

次にPuttyで秘密鍵を使用する設定をする。Puttyを立ち上げ「Session」をクリックする。そして、「Saved sessions」から「server」を選択する。次に「Load」ボタンをクリックする。

次に、「SSH」→「Auth」をクリックする(下図参照)。「Private key file for authentication:」という項目の「Browse ...」というボタンをクリックし、先ほど作成した秘密鍵 C:\putty\secret.ppk を選択する。

「Session」をクリックする。そして、「Save」ボタンをクリックし、保存する。そして、「Open」ボタンを押し、接続する。

今度は、パスフレーズの入力が求められるようになる。そこでパスフレーズを入力する。

以上でPuttyの設定は終わり。WinSCPも同様に秘密鍵を設定する。

WinSCPを起動し、先ほど保存した設定を選択し、「編集」をクリックする。

次に「設定」をクリックする。

「認証」を選択する。

秘密鍵のファイルを選択し、「OK」をクリックする。

次に「保存」をクリックする。

PAGEANT.EXE を用いたショートカット_

Puttyを使うたびにパスフレーズを入力するのは面倒なので、C:\putty\PAGEANT.EXE を用いる。PAGEANT.EXEにカーソルを合わせ右クリックし「ショートカットの作成」を選択する。

作成したショートカットをデスクトップに移動させる。以後は以下の手順でPAGENTを起動させた後に、PuttyやWinSCPを用いる。

  1. PAGENT.EXEのショートカットをダブルクリック
  2. デスクトップ右下の起動中のプログラムの一覧にあるPAGENTのアイコンの上にカーソルを合わせ、「Add key」を選択する
  3. 秘密鍵として C:\putty\secret.ppk を選択する。
  4. パスフレーズが求められるので入力する。
  5. デスクトップ右下の起動中のプログラムの一覧にあるPAGENTのアイコンの上にカーソルを合わせ、「Saved Session」→「server」を選択するとPuttyでログインできる
  6. PAGENTが起動している状態で、WinSCPを使うとパスフレーズなしでログインできる

PAGENTを自動起動したい場合は以下のページを参考にする。ただしパスフレーズの登録は起動するごとに必要。

Puttyの日本語化_

上記の公式版に基づく日本語版はPuTTYrv (PuTTY-ranvis)で配布されている。

emacsで日本語を使う場合は、文字コードの設定とフォントの設定が必要となる。

戻る_