AWSのEC2にSSH接続する

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クライアントツールを用いて接続できる。

接続方法はツールによってまちまちなので、ググってね。以下のツールについては記事があるので参考にしてください。

WinSCP備忘録

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 的なログが出てきて、権限エラーによるものとわかるらしいが、この時は出ていなかった。

参考:問題の解決方法 SSHの鍵認証接続を題材に

結論、サーバーに配置している公開鍵authorized_keysファイルの参照権限が無いため、認証できなかったよう。以下のコマンドでファイルの権限を変更する。

chown sampleuser:sampleuser/home/sampleuser/.ssh/authorized_keys
chmod 600 /home/sampleuser/.ssh/authorized_keys

 

コメント

タイトルとURLをコピーしました