sshとsshd

最終更新日: 2019年9月7日 14時30分

目次

講義の目的

sshを理解できる

sshdを理解できる

sshとsshdの違いが説明できる

sshとsshdのコマンドを実行して何が起こるかを理解できる

known_hosts、sshd_config、authorized_keysファイル等の設定を適切にできる

1. はじめに

この講義では、sshとsshdを理解してサーバーにsshdをインストールした開発環境を構築できることを目標とする講義を行います。

sshとsshdは奥の深い分野なので、WEBエンジニアやネイティブエンジニアが最低限押させておくべき内容に絞っています。

講義の対象は、プログラミングや開発の経験がある人になります。

開発環境はdockerでcentos6.9を利用して構築します。

2. ssh

ssh(Secure Shell)は、あるマシンから別のマシンにアクセスしてログインするためのソフトウェアです。

主な用途は、自分のマシン(以下クライアント)からWEBサーバーなどの遠隔マシン(以下ホスト)にログインするために使われます。

公開鍵暗号方式暗号化して通信します。

暗号化しない通信としてtelnet、rsh、rcp、ftp等があることも知っておくと良いでしょう。

ほとんどのパソコンでsshはインストール済みです。ターミナルやコマンドプロンプトを開いでsshと入力するとコマンドの使い方が表示されます。

$ ssh
usage: ssh [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]

もし利用しているマシンにsshがインストールされていない場合はopenssh-clientsをイントールします。

例として、centos6.9でのイントール方法を記載します。
centos6.9の場合、yumコマンドでインストールします。

$ yum install -y openssh-clients

ライブラリの接頭文字に付加されているopensshはBSDライセンスのフリーソフトです。openssh-clientsをインストールすると、sshコマンドが利用できるようになります。

ユーザー名を指定して、ホストにsshでログインしてみます。

# ssh kakaroto@localhost

ログインに成功するとターミナルにユーザー名が表示されます。

[kakaroto@769961e2ed14 ~]$

3. sshd

sshd(OpenSSH デーモン)はsshのためのデーモンプログラム(OSが稼動している間、ずっと動いているプログラム)です

sshdはクライアントからの接続(主にssh)をlisten(待ち受け)します。つまり、sshdはsshの接続先ホストで動作している必要があります。

centos6.9の場合、yumコマンドでインストールします。

$ yum install -y openssh-server

openssh-serverをインストールすると、OpenSSHサーバーとして利用できるようになります。

4. known_hosts

known_hostsは、接続したことのある各ホストの公開鍵を保存するファイルです。クライアント側のknown_hostsに書き込まれます。 ファイルパスは ~/.ssh/known_hosts です。

実際に流れを確認してみましょう。まずは、ホストに接続する前のクライアントの ~/.ssh/ フォルダの内容です。

# ls -l ~/.ssh/
total 0
-rw------- 1 root root 0 Aug 30 23:48 authorized_keys

クライアントからホストに接続します。

$ ssh root@localhost

最初のホストへの接続の場合、サーバを信頼するかどうかの選択肢が表示されます。

The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 1e:24:b8:eb:61:1b:57:c9:f1:b0:2d:57:11:f0:8e:2a.
Are you sure you want to continue connecting (yes/no)? 

yesと答えると、そのサーバの fingerprint が ~/.ssh/known_hosts に追加されます。

Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts..

ログイン後に ~/.ssh/known_hosts を確認します。known_hostsが作成されていることを確認します。

# ls -l ~/.ssh/
total 4
-rw------- 1 root root   0 Aug 30 23:48 authorized_keys
-rw-r--r-- 1 root root 391 Aug 30 23:57 known_hosts

ファイルの中を確認します。

# cat ~/.ssh/known_hosts
localhost ssh-rsa AAAAB3NzaC1yc

ホストの公開鍵が書き込まれています。

5. sshd_config

sshd_configはsshdの設定ファイルです。ファイルは /etc/ssh/sshd_config に置かれています。

sshdのデフォルトの設定だと、rootでログインが可能になっています。

$ cat /etc/ssh/sshd_config
#PermitRootLogin yes

PermitRootLoginがコメントアウトしてあります。なので、rootログインを防ぐために、sshd_configファイルを書き換えてみます。

PermitRootLogin no

sshdを再起動します。

/etc/init.d/sshd restart

rootでログインを実行します。

# ssh root@localhost
root@localhost's password: 
Permission denied, please try again.

rootのログインが弾かれたのが確認できました。

6. authorized_keys

authorized_keysファイルは、接続を許可する公開鍵を登録しておくことができます。authorized_keysファイルはホストに配置します。

クライアントからsshでsshdが動作しているホストにアクセスした場合に、authorized_keysに情報が書き込まれます。

authorized_keysに記載された公開鍵は、ホスト側の /etc/ssh/sshd_config でPubkeyAuthenticationの設定が有効になっている場合、クライアントはパスワードなしでホストにログインすることができます。

PubkeyAuthenticationの設定は /etc/ssh/sshd_config で確認できます。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

ホストで上記の設定が有効になっていない場合は、/etc/ssh/sshd_config を変更してサーバーを再起動します。

service sshd restart

7. ssh-keygen

ssh-keygenコマンドを利用すると公開鍵と秘密鍵を作成できます。

# ssh-keygen -t rsa -b 4096 -C "test@marsa.com"

ssh-keygenコマンドを実行すると、SSH Keysの保存先やパスワードを聞かれます。保存先はデフォルト、パスワードは自分が普段利用しているパシワードの中から適当に入力するとよいでしょう。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/marsa/.ssh/id_rsa): 
Created directory '/home/marsa/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/marsa/.ssh/id_rsa.
Your public key has been saved in /home/marsa/.ssh/id_rsa.pub.

ssh-keygenコマンドを実行すると、SSH Keysの保存先やパスワードを聞かれます。保存先はデフォルト、パスワードは自分が普段利用しているパシワードの中から適当に入力するとよいでしょう。

8. まとめ

この講義では、sshとsshdについて学習しました。

sshの知識はオンプレミスのLinux環境でもクラウド環境でも必須の知識になります。プログラマーもサーバー管理者も絶対に理解していないといけないいけない知識なので、サーバーや仮想環境を立てて色々な設定を試してみてください。

演習

この講義に関連する演習問題を用意しました。理解度を確認してください。

演習