Yamamoto's Laboratory
SSH

インストールと設定

インストール

ubuntu server をインストールするときに,「インストールするソフトウェアーの選択」の画面で,OpenSSH serverをチェックすれば,インストールされます.後からインストールする場合は,コマンド「# apt-get install openssh-server」を使います.

起動・停止,その他

openssh-server をインストールすると自動的に,ssh のデーモンは起動します.停止,他の操作は,スーパーユーザーで,以下のコマンドを使います(sudo をつける).デーモンの管理は,「サービス(デーモン)の管理」に記述があります.

/etc/init.d/ssh start 起動
/etc/init.d/ssh restart 再起動
/etc/init.d/ssh stop 停止
/etc/init.d/ssh status 状態表示

設定

sshを使ってリモートホストに接続する場合,パスワードを使うよりも鍵交換方式の認証の方が安全と言われています.このような理由から,ここのSSHサーバーではパスワード認証を禁止し,鍵交換方式を使うことにします.そのためには,設定ファイル「/etc/ssh/sshd_config」を以下のように変更します.

PasswordAuthentication no    パスワードログイン禁止、秘密鍵でログインさせる
PermitRootLogin no                 rootログインを禁止
PermitEmptyPassword no       パスワード無しのログインを禁止

設定が完了したら,コマンド「/etc/init.d/ssh restart」で再起動します.

鍵の生成と設定

鍵交換方式の認証では,秘密鍵と公開鍵が必要です.これらの鍵の生成と設定方法を示します.

鍵の生成

リモートホストの ubuntu server では,コマンド「ssh-keygen」で,秘密鍵と公開鍵の作成が可能です.具体的には,以下の通り.

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yamamoto/.ssh/id_rsa):[Enter]キーを押す
Created directory '/home/yamamoto/.ssh'.
Enter passphrase (empty for no passphrase):パスワードを入れる
Enter same passphrase again:再度パスワードを入れる
Your identification has been saved in /home/yamamoto/.ssh/id_rsa.
Your public key has been saved in /home/yamamoto/.ssh/id_rsa.pub.
The key fingerprint is:
6b:a7:34:32:14:0c:d5:42:28:03:1c:30:ab:2a:4f:bc yamamoto@www
The key's randomart image is:
+--[ RSA 2048]----+
|   O=o           |
|**o              |
|*.o.             |
|.+     .         |
|  o  .  S        |
| . .. o ..       |
|  E  o oo .      |
|    . .o         |
|        ..       |
+-----------------+

以上で,秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が作成されました.

次に鍵が作成されたフォルダーに移動して,そこに格納されているファイルの内容を確認します.もし,「authorized_keys」というファイルがあれば,作成された公開鍵をそのファイルに追記します.

$ cat id_rsa.pub >> authorized_keys

「authorized_keys」が無い場合は,以下のように名前を変更します.

$ mv id_rsa.pub authorized_keys

最後にパーミッションを変更します.

$ chmod 600 authorized_keys

秘密鍵(id_rsa)はローカルホストで使います.その設定方法については,以降,windows と Linux に分けて説明します.

Windows での秘密鍵の設定

Windowsからリモートホスト(ubuntu server)にSSHで接続するためのクライアントソフトウェアーとして,私は「Puttyごった煮版」を使っています.秘密鍵の設定には,PuTTYgenを使います.ただし,「Puttyごった煮版」に付いてくる PuTTYgenは,OpenSSH が作成した秘密鍵が読めません.PuTTYgen Error「秘密鍵を読み込めませんでした。(ciphers other than DES-EDE3-CBC not supported)」とエラーが出ます.

この問題の対処方法については,「Topic "Couldn't load private key"」に書かれています.そこに書かれているとおり,puttygen.exeをダウンロードします.

ダウンロード後は,以下のようにして秘密鍵のファイル(*.ppk)をつくります.

  1. まずは,先に作成した秘密鍵(id_rsa)をローカルホストのWindowsに移動させます.リモートホストには,秘密鍵を残さないようにします.移動も,USBメモリーなどの物理メディアを使うことを勧めます.
  2. 次に,さきほどダウンロードした PuTTYgen(puttygen.exe)を起動します.すると,ダイアログ「PuTTY Key Generator」が現れます(図1).
  3. このダイアログのボタン[Load]をクリックします.ファイル読み込みのダイアログが現れますので,先ほど移動した秘密鍵のファイル(id_rsa)を指定します.読み込むときには,ファイルタイプは「All Files(*.*)」に.
  4. すると,この鍵をつくったときのパスワードの入力ボックスが現れますので,タイプします.正しいパスワードを入れると,読み込みに成功したというメッセージ「Successfully imported foreign key…」が現れます.ボタン[OK]をクリックします.
  5. ダイアログ「PuTTYgen Key Generator」が残ります.そして,ボタン[Save private key]を押します(図2).適当な場所やファイル名で保存します.場所や名前はどこでも良いです.
  6. PuTTYgenを終了(File→Exit)させます.
    PuTTYgen 起動直後 鍵の保管
    PuTTYgen 起動直後 鍵の保管

以上で,PuTTYで使う秘密鍵のファイルができました.このファイルを使って実際の接続については,このページの「リモートホストへの接続→PuTTYを使う方法→windows」に記述しています.これを参考に設定を行い,SSH接続してください.

Linux での秘密鍵の設定

Linuxからリモートホスト(ubuntu server)にSSHで接続する場合でも,PuTTYを使っています.Windows同様,OpenSSHが作成した秘密鍵ファイル(id_rsa)をPuTTYが読み込むファイル(*.ppk)に変換する必要があります.変換には,puttygenを使います.ただし,WindowsのようなGUIはなく,コマンドを使います.具体的には,以下のようにして秘密鍵のファイル(*.ppk)をつくります.

  1. まずは,先に作成した秘密鍵(id_rsa)をローカルホストのLinux に移動させます.リモートホストには,秘密鍵を残さないようにします.移動も,USBメモリーなどの物理メディアを使うことを勧めます.私は,ホームディレクトリーの「.ssh」の中に入れました.gFTPでもターミナル版のSSHでも「.ssh」を見るようで,そこがデフォルトになっていると思われます.
  2. 秘密鍵を移動させたディレクトリーに移ります.
  3. 以下のコマンドで必要な秘密鍵ファイル(*.ppk)をつくります.puttygen で ppk ファイルをつくり,パーミッションを変更しています.
    $ puttygen id_rsa -o ubuntu_server.ppk
    Enter passphrase to load key:パスワードを入れる
    $ chmod 600 ubuntu_server.ppk

以上で,PuTTYで使う秘密鍵のファイルができました.このファイルを使って実際の接続については,このページの「リモートホストへの接続→PuTTYを使う方法→Linux」に記述しています.これを参考に設定を行い,SSH接続してください.

リモートホストへの接続

SSHコマンドを使う方法

SSHを使ったリモートホストの接続は,簡単です.普通は,Linux のターミナル,あるいは Windows のコマンドプロンプトで,コマンド「ssh アカウント名@ホスト名 -i 秘密鍵ファイル(id_rsa)の場所」でOKです.すると,鍵を作成したときのパスワードが聞かれますので,タイプします.以上で,起動完了です.

理由は分かりませんが,いつの頃か「ssh アカウント名@ホスト名 -i 秘密鍵ファイル(id_rsa)の場所/id_rsa」としないと入れませんでした.

PuTTYを使う方法

SSHコマンドを使った場合,いっぱいターミナルを開くと,ローカルなのかリモートなのか分からなくなります.そこで,私は PuTTY を使っています.図3のように,表示を変えると人目でローカルとリモートの区別できます.

スクリーンに現れた PuTTY ウインドウ
黄色文字が PuTTY で緑文字が通常のターミナル.

windows

リモートホストへの接続には,「PuTTYごった煮版」を使っています.それを使った鍵交換方式の接続方法を示します.PuTTYを起動すると,カテゴリー別に様々な設定ができます.大事なところの設定については,私は以下のようにしています.

WindowsのPuTTYごった煮版の設定.
カテゴリ 項目 設定
セッション ホスト名(または IP アドレス)(N) 192.168.1.81 接続先のIPアドレス
ポート(P) 22
接続タイプ SSH
セッションの読み込み,保存,削除 通常はここから読み込んで実行.
接続  データ 自動ログインのユーザー名(U) yamamoto アカウント
接続  SSH 優先するプロトコルバージョン 2
接続  SSH  認証 認証のためのプライベートキーファイル(K) PuTTYgenで作成した秘密鍵ファイル
接続  SSH  X11 X11フォワーディングを有効にする チェック(✓)する.

設定が済んだら,カテゴリの「セッション」に移動して,「セッション一覧(E)」下に適当なセッション名を入れて,ボタン[保存]をクリックします.すると,一覧の中にそのセッション名が現れます.今後は,それを選択して,ボタン[読込(L)]をクリックすることにより,設定が反映されます.

設定が反映されたら,[開く(O)]ボタンをクリックします(図4).すると,ターミナルが開き「Passphrase for key…」とパスワードの入力を求められます.鍵を生成したときのパスワードを入れます.するとターミナルが立ち上がります.

Putty 起動
[開く]ボタンを押す

Linux

クライアントにPuTTYを使うかぎり,設定は Windows と同じです.PuTTYの起動は,ターミナルでコマンド「putty」をタイプするか,ubuntuの場合メニューのアプリケーション→インターネット→PuTTY SSH client を選択します.最初の起動では,接続のための設定を行います.重要なところの設定を以下に示します.

LinuxのPuTTYの設定.
Category 項目 設定
Session Host Name (or IP address) 192.168.1.81 接続先のIPアドレス
Port 22
Connection type SSH
Load, save or delete a stored session 通常はここから読み込んで実行.
Connection  Data Auto-login username yamamoto アカウント
Connection  SSH Preferred SSH protocol versin 2
Connection  SSH  Auth Private key file for authentication PuTTYgenで作成した秘密鍵ファイル
Connection  SSH  X11 Enabel X11 forwarding チェック(✓)する.

「Private key file for authentication」の設定では,秘密鍵ファイル(ubuntu_server.ppk)を絶対パスで直接指定します.ボタン[Browse…]をクリックしても,このファイルを見ることができません.なぜならば,このファイルは「.ssh」という隠しディレクトリーに格納したからです.

設定が済んだら,カテゴリの「Session」に移動して,「Saved Sessions」下に適当なセッション名を入れて,ボタン[Save]をクリックします.すると,一覧の中にそのセッション名が現れます.今後は,それを選択して,ボタン[Load]をクリックすることにより,設定が反映されます.

設定が反映されたら,[Open]ボタンをクリックします.すると,ターミナルが開き「Passphrase for key…」とパスワードの入力を求められます.鍵を生成したときのパスワードを入れます.するとターミナルが立ち上がります.

ファイル操作

コマンド「scp(Secure Copy)」

コマンド「scp」を用いると,ローカルとリモートホスト間でファイルやディレクトリーのコピーができます.使い方は,コマンド「cp」とほとんど同じです.リモートホストのファイルやディレクトリーの指定方法は,次のようにします.

www.yamamo10.jp:/home/yamamoto/hoge/fuga.txt 絶対パス指定
yamamoto@www.yamamo10.jp:hoge/fuga.txt ユーザー「yamamoto」でファイル指定

GUIクライアントアプリケーション

windowsであれば「WinSCP」,Linuxであれば「gFTP」が便利です.

ルーターの設定

外部からアクセスするためには,自宅のルーターを設定する必要があります.私は,NTT PR-S300NEを使っています.その設定は,「詳細設定→静的IPマスカレード設定」で行います.

その他

鍵が変わった場合

私の場合,ubuntu server を数回インストールし直したので,サーバーのホスト鍵が変わってしまいました.以下のようなメッセージが現れました.

$ ssh yamamoto@192.168.1.81
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
5d:e9:26:a5:a5:f4:16:ef:7b:05:5e:e6:63:62:59:b4.
Please contact your system administrator.
Add correct host key in /home/yamamoto/.ssh/known_hosts to get rid of this message.
Offending key in /home/yamamoto/.ssh/known_hosts:5
RSA host key for 192.168.1.81 has changed and you have requested strict checking.
Host key verification failed.

次のようなことが書かれています.

警告:リモートホストの認証が変わりました!
誰かが,何か悪さをしている可能性があります!
RSAキーが変わった可能性もあります.
何者かが,今あなたを盗聴しているかもしれません(中間攻撃)!
リモートホストにより送られたRSAキーのフィンガープリントは,「5d:e9:26:a5:a5:f4:16:ef:7b:05:5e:e6:63:62:59:b4」です.
あなたのシステムアドミニストレーターに問い合わせてください.
このメッセージが出ないようにするために,「/home/yamamoto/.ssh/known_hosts」に正しいホストキーを追加してください.
問題のあるキーは,「/home/yamamoto/.ssh/known_hosts」の5番目.
129.168.1.81のRSAホストキーは変わりました.そして,あなたは厳密なチェックを要求しました.
ホストキーの検証に櫛比しました.

このメッセージから known_hosts に記載された5番目のホストに問題があることが分かります.認証の過程で鍵が合わなかったのです.このファイルの5行目を削除して,再度,初回の接続からやり直すこともできます.これは手動で行うので間違いが発生することもあるので,次のようにコマンド「ssh-keygen」を使うことを勧めます.

$ ssh-keygen -R 192.168.1.81
/home/yamamoto/.ssh/known_hosts updated.
Original contents retained as /home/yamamoto/.ssh/known_hosts.old

こうすることにより,192.168.1.81のホスト公開鍵の情報が削除されます.

そうして,以下のように初回接続をもう一度やり直します.

$ ssh yamamoto@192.168.1.81
The authenticity of host '192.168.1.81 (192.168.1.81)' can't be established.
RSA key fingerprint is 5d:e9:26:a5:a5:f4:16:ef:7b:05:5e:e6:63:62:59:b4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.81' (RSA) to the list of known hosts.
yamamoto@192.168.1.81's password: xxxxxx   パスワードを入れる
Welcome to Ubuntu 11.10 (GNU/Linux 3.0.0-12-server x86_64)

 * Documentation:  https://help.ubuntu.com/11.10/serverguide/C

  System information as of Mon Apr 30 15:34:03 JST 2012

  System load:  0.06               Processes:           83
  Usage of /:   1.1% of 105.87GB   Users logged in:     0
  Memory usage: 1%                 IP address for eth0: 192.168.1.81
  Swap usage:   0%

  Graph this data and manage this system at https://landscape.canonical.com/
New release '12.04 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Mon Apr 30 15:33:10 2012 from 192.168.1.61

ページ作成情報

参考資料

  1. SSHの設定については,初心者がWEB開発に挑戦の「UbuntuにSSHサーバーをインストール」を参考にしました..
  2. 鍵作成については,「Linuxでsshの鍵を作成するには」を参考にしました.
  3. SSHのX転送の時の日本語入力の問題に関しては,「SSHのX転送利用時に、日本語IMEが有効にならない件」を参考にしました.

更新履歴

2012年12月16日 ページの新規作成
2014年04月04日 「起動・停止,その他」を追記


no counter