この記事について
・対象
対象:IT初心者「しょぼん君」
・説明
◀︎ 初心者向け、イメージを掴むキッカケになることが目的の記事
◀︎ たまに深掘り、でもやっぱり初心者向け
◀︎ 砕いた理解で、一部正確ではない場合があります。普通に間違えてたらごめんなさい
・しょぼん君のぼやき
しょぼん君:『使ってるけど、よく知らぬ』
SSHとは
SSH(Secure Shell)とは、安全に通信を行って、ネットワークに接続された機器を遠隔操作するための通信手段(プロトコル)の1つです。「通信する側とされる側で、SSHでやり取りをしよう!」と取り決めることで安全に通信を行います。
SSHには、SSH1 と SSH2 の2種類の通信手段(プロトコル)があります。
現在はSSH2を利用するのが主流となっているため、これより以下は、主にSSH2について話をしています。
SSHを利用するためには、前提としてSSHプロトコルを使用する為のソフト(例えば、OpenSSHなど)が導入されており、サーバー側で「SSHデーモン」、クライアント側で「SSHクライアント」が起動されている必要があります。
Linuxではほぼデフォルトで導入され、起動されています。sshコマンドが使えるか確認してみましょう。
$ ssh -V
しょぼん君:『sshコマンドって、sshの通信が可能なツールのコマンドだったんだね』
sshの認証方法
sshの通信では、通信してやりとりする相手が本当に正しいか。を確認するために認証を行います。
sshの主要なユーザー認証方式では、「パスワード認証方式」と「公開鍵認証方式」の2通りがあります。
①パスワード認証方式
パスワード認証方式は、ユーザー名とパスワードでログインする方式です。ユーザー名とパスワードは接続先OSのユーザーアカウントで作成をした情報を使用します。
強固なパスワードを設定し、管理をしっかり行えばパスワード認証方式でも問題はありませんが、それらの管理や設定は各ユーザーに依存するため、一定水準で安全に利用するためにはパスワード認証方式は使用せず、SSHの設定ファイルを変更して無効にするのが標準です。
しょぼん君:『ユーザー名とパスワードを知っているから、正真正銘しょぼんだよ』
②公開鍵認証方式
事前にローカル側で作成した公開鍵を、ログイン先のサーバに登録することで、登録された公開鍵に対応した秘密鍵を持っているクライアントのみが接続できる認証方式です。「パスワード認証」と比べ事前の準備が必要ですが、個々のユーザーの設定に依存しづらいという側面もあり、より安全な認証です。
実際に秘密鍵を相手に見せつけている訳ではないのでイメージとしてですが、しょぼん君が、「この秘密鍵が目に入らぬか!」と言うには、サーバーがその秘密鍵がしょぼん君のものであることを知っていなければいけません。
そして、サーバーはその秘密鍵が本物かを見極める必要があります。
また、しょぼん君は秘密鍵を見せつけている相手が、本物の対象サーバーなのかを確かめる必要があります。
公開鍵認証方式では「秘密鍵と公開鍵」を利用して上のような「ユーザー認証」「ホスト認証」を実施ししています。
SSH通信をやってみる
実際に鍵を作成して、通信をしてみましょう。通信先のサーバーが準備されていることを前提に以下の作業を実施します。それぞれクライアント側の作業とサーバー側の作業があります。
秘密鍵と公開鍵を生成(クライアント)
ホームディレクトリ配下に、権限を指定して.sshフォルダを作成します。
$ install -m 0700 -d ~/.ssh
鍵を作成します
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096 -C "Qiita@hoge.com" -f ~/.ssh/id_rsa
ssh-keygenのオプション
-t
「鍵の種類を指定」
-b
「生成する鍵のビット数を指定」
RSA 鍵の場合、最小のサイズは 1024 ビットであり、デフォルトは 2048 ビット
-C
「コメントを追加」
-f
「鍵を格納するファイル名を指定」
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):パスフレーズを入力(入力しないとなしになる)
Enter same passphrase again: パスフレーズを再入力
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
$ ls ~/.ssh
config id_rsa id_rsa.pub known_hosts known_hosts-e known_hosts.old
id_rsa.pub
・・・公開鍵
人に知られても問題ない(メールなどで送っても良い)
秘密鍵で作成した電子署名の妥当性を検証出来る
id_rsa
・・・秘密鍵
人に知られてはいけない
公開鍵を生成出来る
電子証明を生成出来る
しょぼん君:『鍵が出来た。~/.sshに鍵を置くのがデフォルトなのだね』
作成した公開鍵を、サーバーに配置することでSSHでの通信が実現します。
サーバー側
sshでログインしたいユーザーのホームディレクトリ配下に、.sshディレクトリがない場合には権限を指定して作成。
$ install -m 0700 -d ~/.ssh
authorized_ファイルを作成し、権限を変更する。
内容は、クライアント側で作成した「id_rsa.pub」の内容を記載する。
$ vi ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
ルートになり、sshd_configを編集する
$ su
# vi /etc/ssh/sshd_config
以下の#を外す
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
追加で以下を設定しても良い
PasswordAuthentication:no
--> パスワードログインを禁止
PermitRootLogin:no
--> rootでのログインを禁止
sshdを再起動(以下コマンドはCentOSの場合)
# service sshd restart
ログイン
以下のどちらかのオプション指定でログイン
ssh -l <ログイン先ユーザー名> -p <ポート番号> <host>
ssh -p <ポート番号> <ログイン先ユーザー名>@<host>
sshのオプション
-l「ユーザーを指定」
<ログイン先ユーザー名>@ と同じ
-p「ポート番号を指定」
sshのデフォルトは22番ポートだが、変更している場合は指定が必要
しょぼん君:『繋がった。ログイン情報指定するのって面倒だね』
Tips
ログイン情報を事前に書き込んで、覚えさせておくことが可能です。
vi ~/.ssh/config
例えば以下のような内容を書き込みます。
HOST RA_KU_SI_TA_I <--(ログインの際に入力する文字です)
HostName 192.168.111.1 <--(ホスト名やIPアドレス)
User hoge <--(ユーザー名)
Port 1234 <--(ポート番号
)
以下コマンドでログイン可能になります。
ssh RA_KU_SI_TA_I
しょぼん君:『別資料を参照しながらは面倒だったから、これは便利だな』