Yamamoto's Laboratory
SSH

インストールと設定

インストール

ubuntu server をインストールするときの「インストールするソフトウェアーの選択」の画面でOpenSSH server をチェックすれば,SSH のサーバーがインストールされます.後からインストールする場合は,以下のコマンドをつかいます.

$ sudo apt install openssh-server

インストールされている apache のバージョンの確認には,コマンド「ssh -V」を使います,以下に,コマンドとその結果を示します.

$ ssh  -V
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017

起動と接続

サーバー側のポートは空いているはずなので (参照),サーバー (デーモン: sshd) を起動すれば,外部との接続が可能になります.サーバーの起動コマンドは,「sudo systemctl start ssh」です.

$ sudo systemctl  start ssh

通常,クライアント側には ssh コマンドがインストールされています.クライアント側の以下のコマンドで,サーバーと接続ができます.Windows でも Linux でもコマンドは同一です.

$ ssh   uuuu@aaa.bbb.ccc.ddd

uuuu はサーバーのアカウント名で,aaa.bbb.ccc.ddd は サーバーの IP アドレスです.途中でパスワードの問い合わせがありますので,答えます.ログインできたら,インストールとポートは問題ないことが確認できたことになります.SSH で接続するだけならば,とても簡単です.

SSH を制御するコマンド

以下のコマンドで,SSH サーバー (sshd) をコントロールすることができます.これらのコマンドを実行する場合,ルートでの操作 (sudo) が必要です.

systemctl start ssh SSH のデーモンを起動します.
systemctl stop ssh SSH のデーモンを停止します.
systemctl restart ssh SSH デーモンを再起動します.デーモンが実行されていない場合,起動します.
systemctl reload ssh 設定ファイルを再読込みします.
systemctl status ssh ステータスを表示します.

鍵の生成と設定

sshを使ってリモートホストに接続する場合,パスワードを使うよりも鍵交換方式の認証の方が安全と言われています.鍵交換方式の認証では,秘密鍵と公開鍵が必要です.リモートホスト (WEB server 3)には公開鍵を,ローカルホストには秘密鍵を保管します(図1).これら秘密鍵と公開鍵は,server の ssh-keygen を使います.ここでは,この設定を示します.鍵交換方式の認証が不要の場合は,この節の設定は不要です.

図1: 鍵の場所

鍵の生成

鍵の生成は,Ubuntu server を使って生成します.秘密鍵と公開鍵の生成コマンドは「ssh-keygen -t rsa」です.オプション -t はタイプを表し,このコマンドで rsa の鍵の生成を行います.以下に具体的なコマンドとその実行結果を示します.

$ ssh-keygen -t rsa
yamamoto@www3:~$ 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:
SHA256:IoPlGOVtjJeR+ijIMoS37dPEknam34bZdVsOlUWW228 yamamoto@www3
The key's randomart image is:
+---[RSA 2048]----+
|  o..      .B .. |
| ..B         .o  |
|o.+ =  o     o ..|
|oo.B  +     o   E|
|++oo+o..S  .   ..|
|*.o +oo.+ o .   .|
|o. + o = . =     |
|    + =.. . .    |
|     o...        |
+----[SHA256]-----+

このコマンドの結果,/home/yamamoto/.ssh に,秘密鍵「id_rsa」と公開鍵「id_rsa.pub」が生成されます.公開鍵はサーバーに,秘密鍵はローカルホストに保存します.

公開鍵の設定

先ほど作成した公開鍵「id_rsa.pub」は,そのままでは使えません.ファイル「~/.ssh/authorized_keys」に,公開鍵を記述必要があります.このファイルには,ログインが許可されているの公開鍵の一覧が保存されています.ここでは,公開鍵「id_rsa.pub」をファイル「~/.ssh/authorized_keys」に記述する方法を示します.既にファイル「authorized_keys」が有る場合と,無い場合でコマンドが異なりますので分けて説明します.

authorized_keys が無い場合

ログインするアカウントのホームディレクトリにファイル「~/.ssh/authorized_keys」が無い場合です.この場合は簡単で,先ほど作成した公開鍵「id_rsa.pub」名称を「authorized_keys」に変更するだけです.

$ cd ~/.ssh
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys

最後にパーミッションを変更しておいたほうが良いです.

authorized_keys が有る場合

既にファイル「~/.ssh/authorized_keys」が有る場合です.そのファイルに,公開鍵を追記する必要があります.具体的には,以下のようにします.

$ cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys

ファイルに追記するだけなので,他の方法も可能です.

ローカスホスト (Windows) の設定

ローカルホストとして,Window を使うため設定を示します.クライアントとして PuTTY を使います.

PuTTY のインストール

Windows からリモートホスト (ubuntu server) に SSH で接続するためのクライアントソフトウェアーとして,私は「Puttyごった煮版」を使います.そのダウンロードとインストール方法は,以下のとおりです.

  1. iceiv+putty」のページから最新版「putty-gdi-20190724.zip」(2019年8月25日)をダウンロードします.
  2. zip ファイルを解凍した後に出来上がるフォルダー「putty-gdi-20190724」を「C:\Program Files」に保管します.
  3. ディレクトリー「C:\ProgramData\Microsoft\Windows\Start Menu\Programs\」にフォルダー「Putty」を作ります.ここのは実行プログラムのショートカットを入れます.
  4. そして,先ほど解凍・保管した Putty の中にある「putty.exe」と「puttygen.exe」のショートカットを作成します.作成したショートカットを「C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Putty」に入れます.

この Putty は解凍しただけで使用できますが,Windows のプログラムのようにスタートメニューに登録したほうが便利です.スタートメニューへの登録が面倒であれば,解凍されたそのままの状態で使って下さい.

秘密鍵の設定

注意: 鍵交換方式の認証が不要の場合は,この節の設定は不要です.鍵交換方式では,サーバー側は公開鍵を,クライアント側 (Windows) は秘密鍵を持ちます(図2).この秘密鍵を持っているクライアントのみが,サーバーにログインできます.そのため,パスワード認証よりも,格段に安全性が高まります.ただし,この鍵認証を行うためには,クライアントとサーバーの両方で設定が必要です,ここでは,Windows をクライアントとして,Putty で接続する場合のクライアント側の設定を示します.サーバー側の設定は,「鍵交換方式でのログイン」に示します.

図2: Windows での鍵交換認証

Putty は OpenSSH が作成した秘密鍵が読めないので,PuTTYgen で ppk ファイルにします.手順は,以下のとおりです.

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

図3: PuTTYgen 起動直後

図4: 鍵の保存

以上で,PuTTYで使う秘密鍵のファイルができました.

ローカスホスト (Linux) の設定

Linux からリモートホスト (web_server) に SSH で接続する場合でも,PuTTY を使っています.その設定を示します.

putty のインストール

Windows からリモートホスト (ubuntu server) に SSH で接続するためのクライアントソフトウェアーとして,私は「Putty」を使います.そのインストールコマンドは,以下のとおりです.

$ sudo apt install putty

秘密鍵の設定

注意: 鍵交換方式の認証が不要の場合は,この節の設定は不要です.Putty の秘密鍵の設定は,Windows と同じです.鍵交換方式では,サーバー側は公開鍵を,クライアント側 (Linux) は秘密鍵を持ちます(図5).この秘密鍵を持っているクライアントのみが,サーバーにログインできます.そのため,パスワード認証よりも,格段に安全性が高まります.ただし,この鍵認証を行うためには,クライアントとサーバーの両方で設定が必要です,ここでは,Linux をクライアントとして,Putty で接続する場合のクライアント側の設定を示します.サーバー側の設定は,「鍵交換方式でのログイン」に示します.

図5: Linux での鍵交換認証

Putty は OpenSSH が作成した秘密鍵が読めないので,puttygen で ppk ファイルにします.手順は,以下のとおりです.

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

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

サーバー側の設定

鍵交換方式でのログイン

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

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

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

パスワードでのログイン

鍵交換方式を使わないでパスワードでログインする場合は,設定ファイル「/etc/ssh/sshd_config」を以下のように変更します.

PermitRootLogin no                 rootログインを禁止
PermitEmptyPassword no       パスワード無しのログインを禁止

もちろん,これらの設定は変更可能です.設定が完了したら,コマンド「/etc/init.d/ssh restart」で再起動します.

PuTTY での接続

設定

クライアントに PuTTY を使うかぎり,設定は Linux も Windows と同じです.最初の起動で,接続のための設定を行います.重要なところの設定を以下に示します.

LinuxのPuTTYの設定.
Category 項目 設定
Session Host Name (or IP address) 192.168.1.82 接続先の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 チェック(✓)する.

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

これらの設定に加え,Window > Color/Fonts で色とフォントの設定が可能です.これらについては,お好みで設定して下さい.私は Default Foregrand を黄色 (255, 255, 0),Default Background を黒色 (0, 0, 0) としました.Fonts は,「Takaoゴシック12」です.

設定後にカテゴリの「Session」に移動して,「Saved Sessions」下に適当なセッション名を入れて,ボタン [Save] をクリックします (図6).すると,一覧の中にそのセッション名が現れます (図7).以上で設定は,完了です.

図6: 設定の保存

図7: セション名

起動

日々の通常起動方法を示します.セッションを選択し,ボタン [Load] をクリックすることにより,設定が反映されます (図8).そして,ボタン [Open] をクリックします (図9).すると,ターミナルが開き「Passphrase for key…」とパスワードの入力を求められます.鍵を生成したときのパスワードを入れます.するとターミナルが立ち上がります.

図8: 設定のロード

図9: 端末オープン

その他の接続

コマンド「ssh」

コマンド「ssh」を使うと,ターミナルから直接接続できます.Windows と Linux の使い方は,同じです.コマンドは,「ssh アカウント名@IPアドレス or ホスト名」です.具体例を以下に示します.

$ ssh アカウント名@192.168.1.82
Enter passphrase for key '/home/ユーザー名/.ssh/id_rsa': 
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-58-generic x86_64)

ファイル転送「scp」

「scp」(Secure Copy)を用いると,ローカルとリモートホスト間でファイルやディレクトリーのコピーができます.

コマンドライン

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

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

GUI

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

ページ作成情報

参考資料

  1. 私のサイトですが,Ubuntu server SSH を参考にしました.

更新履歴

2019年09月05日 ページの新規作成


no counter