SSH接続とは
SSHはSecure Shellの略称で、通信プロトコルの一種。
サーバーと通信する際に使用する、認証機能によって安全を担保する通信方法。
SSHとSSLの違い
似た単語にSSLがあり、こちらも暗号化通信をするので混同されがちだが、が全くの別物なので注意する。
SSLはHTTP通信をする際に使用される、すなわちインターネットとの通信を暗号化する技術であるのに対し、SSHはtelnet、つまりはサーバーとの直接の通信をする際に使用される。
SSH接続の鍵認証
SSH接続はBasic認証(パスワードを用いた認証)と、公開鍵認証の2通りの認証方式があるが、安全性の観点で、標準的に公開鍵認証が使用される。
以下は公開鍵認証を用いたSSH接続方法を記述する。概要は以下の通り。
- キーペア(秘密鍵と公開鍵)を作成し、それを用いて通信の安全性を担保する。
- サーバー内には公開鍵を配置する。
- SSHクライアントツールを用いて、サーバーに接続する。ツール側で秘密鍵を使用する。秘密鍵を持つものしか接続できないため、通信の安全性が担保される。
SSHクライアントツールでは、RLoginやteratermなどがある。RLoginの方が使いやすいのでおすすめ。
以下、SSH接続設定の詳細手順を記載する。
ここでは、AWSのEC2でサーバーを立てている前提で記述するが、Linuxサーバーでの基本的な仕様は同じ。
キーペアの作成
■EC2>キーペア>キーペアを作成
- 名前:キーの任意の名前を設定する。キーを使用するユーザー名をあらかじめ決めておき、ユーザー名(※後述)と一致させると良い。(例:kp-usersample)
- キーペアのタイプ:RSA
- プライベートキーファイル形式:ppk(※後述)
■秘密鍵がダウンロードされる
EC2の場合では上記で簡単に作成できるが、コマンドでやる場合は ssh-keygenコマンドを使用する。 使いかたはググってね。
■秘密鍵から公開鍵を生成
秘密鍵から公開鍵が生成できるが、SSHクライアントツールを使用すると簡単にこれを実施できる。
ここでは、SSHクライアントツールに、WinSCPを使用する。
WinSCPを起動>新しいセッション>新しいサイト
設定 > SSH > 認証 > 秘密鍵を選択
公開鍵を表示
ここで表示される内容が公開鍵の内容となる。
この後のサーバー側の設定で、この公開鍵の情報が必要となるため、頭に置いておくこと。
ユーザー名はどのような名前で指定する?
ここで言うユーザーとは、サーバーにアクセスするためのアカウントのようなもの。
1人1人に対し作成するようなものではなく、このユーザーはこの権限、というように、あくまでロール管理の目的で設定する。
そのため、汎用的な名称で設定する。
複数のサーバーで、同じ鍵を使用することも可能なので、横断的な鍵を作成する場合は、プロジェクト名-ロール のような鍵名称にすると良い。
ppkとppmの違い
鍵の形式。
形式によって、使用できるSSHクライアントツールなどが変わってくる。
今回は、Win-SCPでアクセス出来たりと便利そうなのでppkで作成した。
サーバー上に公開鍵を配置する
ユーザーに対応した鍵になるので、まずはサーバー上で、ユーザーを作成する必要がある。
作成したユーザーのディレクトリ (/home/username) の中に公開鍵を配置することで、そのユーザーのみが、作成したキーペアでアクセスできるようになる。
ユーザー用のディレクトリを作成する
ユーザー情報は /home直下に格納するのがデフォルトとなっている。
鍵認証を設定する場合は、ユーザーフォルダの中に.sshフォルダを作成する
/home/usersample/.ssh
グループを作成する
ユーザーはグループ管理されているため、独立したグループとして登録するのであれば、まずはグループを作成する。
groupadd usersample -g 1001
ユーザーを作成する
ユーザーを作成し、 グループに追加、 ユーザーのhomeディレクトリをどこにするか、を設定する
useradd usersample -u 1001 -g 1001 -md /home/usersample -s /bin/bash
ユーザーのディレクトリ内に公開鍵を配置する
先ほど秘密鍵から生成された公開鍵の内容を、以下のファイルにそのままコピペする。(authorized_keysが無ければ作成する)
/home/sampleuser/.ssh/authorized_keys
公開鍵の権限を、作成したユーザーのみ閲覧できるように変更する
以下のコマンドで、鍵の権限を変更する。
chown sampleuser:sampleuser /home/sampleuser/.ssh/authorized_keys chmod 600 /home/sampleuser/.ssh/authorized_keys
サーバーに接続してみる
ここまで出来たら、接続設定は完了しているので、SSHとか、FTPクライアントツールを用いて接続できる。
接続方法はツールによってまちまちなので、ググってね。以下のツールについては記事があるので参考にしてください。
Appendix
アプリからも鍵をかけたフォルダにアクセスしたい
APIからの通信は、SSHではなくTSL接続が基本なので、こちらの認証が使用されるため鍵の設定などは不要。
上記で作成している鍵は、あくまでSSH接続する際のもの
インシデント
公開鍵認証を設定していても、 パスワードの更新を求められる
パスワードを使用しなくても、鍵でアクセスできるが、 デフォルトではパスワードの設定が必要となっており、更新を求められることがある。(sshd_conf とかいじれば、パスワードの設定不要にできるかも)
パスワード設定の流れは以下
アカウント状態確認
passwd -S [userName]
パスワード設定
cd /etc passwd sftp-user
SSH接続しようとするとエラー
エラーメッセージ
・WinSCPの場合
No supported authentication methods available (server sent: publickey,gssapi-keyex,gs
・RLoginの場合
SSH2 User Auth Failure "publickey, gssapi-keyex, gssapi-with-mic" Status=1004 Send Disconnect Message... publickey (sa-sha2-256), gssapi-with-mic(172.xxx.xxx.xxx) You may need to change the ssh-rsa key sign algorithm SHA1 to SHA2-256/512
SSH接続のログを見てみる
tail -200f /var/log/secure
AuthFailerとなっているが詳細がわからなかった。本来なら、 bad ownership 的なログが出てきて、権限エラーによるものとわかるらしいが、この時は出ていなかった。
結論、サーバーに配置している公開鍵authorized_keysファイルの参照権限が無いため、認証できなかったよう。以下のコマンドでファイルの権限を変更する。
chown sampleuser:sampleuser/home/sampleuser/.ssh/authorized_keys chmod 600 /home/sampleuser/.ssh/authorized_keys
コメント