SSHについて調べたことをまとめてみる
SSHについて、基本情報技術者試験の勉強を通してざっくりと理解したつもりでいたけれど、先日社内のメンターでありチームリーダーであり上司である方からこのあたりのレクチャーを受ける機会があり、基本的な部分で「?」となる部分も多かったのでこの機会にもう1段階理解を深めたいと思い、SSH周りを調査・まとめてみました。
SSHとは
- Secure SHellの略
- ネットワークを介して別のコンピュータを遠隔操作するためのツール
おなじようなツールにTelnetやFTPがある。
SSHとTelnetのちがい
- 通信データが暗号化されるかされないか
- Telnetは通信データが暗号化されない
公開鍵認証方式
sshでサーバーに接続するには「認証」を行う必要があり、その認証方式にはいくつかあります。
- パスワード認証
- 公開鍵認証
- (ワンタイムパスワード認証)
公開鍵認証方式は2つの鍵を使って認証を行うより安全な認証方式です。
sshはサーバー上で任意のコマンドを実行できる便利なサービスですが、その分、安全対策にはより気を使わなければなりません。
sshをより安全に使うために公開鍵認証方式をつかってログインするのが好ましいです。
公開鍵の作成
# Users/ユーザー名/.ssh にて
$ ssh-keygen # 公開鍵と秘密鍵を作成するコマンド。いくつかオプションがある
# オプションその①: 「-t 方式」 作成する鍵の暗号化形式を「rsa」(デフォルト)、「dsa」「ecdsa」「ed25519」から指定する
# オプションその②: 「-b ビット数」 作成する鍵のビット数を指定する(RSA形式の場合、デフォルトは2048bit)
# => 秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が作成される。
$ ls
id_rsa id_rsa.pub
- 秘密鍵 ⋯ 電子署名を「作る」ことができる (他の人に教えてはいけない)
- 公開鍵 ⋯ 電子署名が正しいか「検証する」ことができる (他の人に教えてもよい)
コマンドのオプションはここに詳しくのっている
次のコマンドを実行するとssh-keygenで作成した公開鍵がクリップボードにコピーできる。
$ cat ~/.ssh/id_rsa.pub | pbcopy
SSHを使ってサーバーを遠隔操作する
PCに導入されているSSHクライアントというソフトを使います。
Macのターミナルを起動し、ssh
と入力することで使えます。
# 基本的な書式
ssh ユーザー名@ホスト名
# 公開鍵認証方式
ssh ユーザー名@ホスト名 -i ~/.ssh/鍵の名前
# ポート指定 & 公開鍵認証方式
ssh ユーザー名@ホスト名 -i ~/.ssh/鍵の名前 -p ポート番号
指定したサーバーにリモート接続され、アクセスが許可されたユーザーの場合はパスワードを聞かれます。
正しいパスワードを入力するとサーバーに接続できるようになります。
.ssh/config
- ssh経由でリモートサーバーへ接続する際に利用されるファイルでSSHクライアント用の設定ファイル
- このファイルにホスト名(またはIPアドレス)、ユーザー名、SSH接続時のオプションを記載しておくことでSSH接続を行う際、これらの情報を省略できる
Host 任意の接続名(setsuzokusakinonamae)
HostName ホスト名
User ユーザー名
Port ポート番号
IdentityFile 鍵へのPATH(例えば~/.ssh/hoge.key)
ssh setsuzokusakinonamae
こんなかんじでssh + 接続名
の指定で接続が可能となります。
Include でssh/configを分割して利用可能
社内のこのあたりの設定でInclude
なる記述をみつけたので少しだけ調べてみました。
OpenSSHのバージョン7.3以降で利用できる機能だそうです。
なにもの?
- ssh_configを複数に分割して利用することが可能となる。
例えばこんなかんじでconfigファイルをおいたとき
~/.ssh
├─ config
└─ sub_config
config内でIncludeオプションを利用し次のように記述するとconfigからsub_configを読み込むことができるようになる。
Include ~/.ssh/sub_config
Discussion