(最終更新月:2024年4月)
✔当記事は以下のような方に向けて書かれています
「SSH接続ってなんだろうか?」
「ローカルコンピューター、リモートコンピューターってなんのこと?」
「リモートコンピューターにアクセスしたい!」
✔当記事でお伝えすること
- SSH接続とは
- パスワードでリモートコンピューターへアクセスする方法
- 鍵を使った認証法とその応用
当記事を通じて、SSH接続とは何かの基本から関連する用語、SSH接続を使ってできる限り安全にアクセスする応用した使い方まで、すべて理解できます。
ぜひ最後までご覧ください。
✔動画による解説
SSHについて10分で見て学べる動画を公開しています。
SSHの基礎知識
SSHとは、ローカルコンピューターからリモートコンピューターへ接続すること
SSHについて理解することで、エンジニアとしてステップアップできることは間違いありません。
さまざまな場面で、手元のコンピューターだけでなく、リモート環境にアクセスする必要があるからです。
- SSHとは?
- SSHの主な特長と機能
- SSH接続における認証の種類
- SSH関連の覚えておくべき用語一覧
SSHとは?
SSHとは、手元のコンピューターから別のコンピューターへアクセスする方法のひとつです。
ターミナルやコマンドプロンプトから、SSHコマンドによって、他のコンピューターへログインできます。
ssh ユーザー名@ホスト名
SSHを使用することで、データの暗号化が保証され、セキュリティが強化され他状態でデータのやりとりが可能です。
SSHコマンドについては詳しくこちらで説明しています。
SSHの主な特長と機能
SSHには、以下のような特徴があります。
- 通信の暗号化
- ファイル転送
- ポートフォワーディング
詳しく理解するために、ほかの通信方法と比較してみましょう。
機能 | Telnet | FTP | SSH |
---|---|---|---|
通信の暗号化 | なし | なし | あり |
ユーザー認証 | パスワードのみ | パスワードのみ | パスワードや公開鍵認証など |
ファイル転送 | – | あり | あり |
ポートフォワーディング | – | – | あり |
セキュリティ | 低い | 低い | 高い |
このように、SSHはTelnetやFTPに比べてセキュリティ面で大幅な改善がなされており、汎用性も高いリモート接続プロトコルといえます。リモートアクセスを行う際は、できるだけSSHの利用をご検討ください。
SSH接続における認証の種類
SSH接続には以下2つの認証方法があります。
- ユーザー名とパスワード
- 公開鍵・秘密鍵
鍵認証を利用することで、さらにセキュリティを強化が可能。
当記事では鍵認証による設定方法も解説していきます。
SSH関連の覚えておくべき用語一覧
SSH接続の基本を説明するにあたっての用語とその解説です。
用語をわからないまま放っておくと、理解が深まりません。
用語 | 説明 |
---|---|
ローカルコンピュータ | ユーザーが直接操作しているコンピュータ |
リモートコンピュータ | ネットワーク上の別の場所にあるコンピュータ |
クライアント | リモートアクセスを行うユーザー側のコンピュータ |
サーバー | リモートアクセスを受け付けるコンピュータ |
ポート | コンピュータの通信経路を識別する番号 |
公開鍵暗号化 | 公開鍵と秘密鍵の組み合わせで通信を暗号化する方式 |
鍵ペア | 公開鍵と秘密鍵の組み合わせ |
SSHキー | SSHで使用する公開鍵と秘密鍵のペア |
SSHトンネル | SSHを使ってネットワーク上の通信経路を暗号化する仕組み |
ポートフォワーディング | SSHを使って特定のポートを転送する機能 |
認証 | ユーザーの正当性を確認する仕組み |
暗号化 | 通信内容を秘匿化する仕組み |
復号化 | 暗号化された内容を元の形式に変換する仕組み |
SSH接続 | SSHプロトコルを使ってリモートコンピュータに接続する |
SSH実践の準備: リモート環境を準備しよう
まずはSSHがどんなものかやってみましょう。
リモート環境が準備できていない方は以下などの方法で準備が可能です。
- RaspberryPIで自宅に小さなサーバーを準備する
- DigitalOceanでお試し、無料でクラウドサーバーを構築
✔自前でリモートコンピューターを準備したい方へ
✔クラウドサービスでリモート環境を構築したい方へ
認証方法1: パスワードによるSSH接続で必要な情報
まずはシンプルで簡単、パスワード認証によるSSH接続を試しましょう。
パスワード認証において必要な情報は下記の3つです。
- リモートコンピューターのIPアドレス(ドメイン名)
- ユーザー名
- パスワード
それぞれ詳しく解説します。
リモートコンピューターのIPアドレス(ドメイン名)
クラウドサービスであれば、登録時などにグローバルIPアドレスが割り当てられますので特に調べる必要はありません。
例えばDigitalOceanであれば、以下の画面で確認できます。
Droplets > IP Address
自前のサーバーの場合は、まずは同LAN内でのIPアドレスを取得しましょう。
また、LAN外から接続するには別途固定のグローバルIPアドレスを取得する必要がありますので、詳細は別記事にてご紹介します。
LAN内でのIPアドレスを取得するためにはターミナル上で、以下のコマンドを打ち込みます。
$ ip address show
色々と表示されると思いますが、よく見ると、以下のように記載されています。
この「192.168.11.12」がLAN内でのIPアドレスになります!
LAN内のIPアドレスは、「192.168.」から始まることがほとんどです
また、3番目の数字は同LAN内では同じになります
最後の数字がそれぞれLAN内でインターネットに接続されている、パソコン、スマホ、プリンタ、などの機器に割り当てられています
ユーザー名、パスワードについて
クラウドサービスであれば、情報の確認ページなどでユーザー名、パスワードは取得できるはずですので与えられているものをお使いください。
自前のコンピューターの場合は、そのコンピューターにログインする際のユーザー名、パスワードが、SSH接続の際のユーザー名、パスワードです。
接続してみよう!
ssh ユーザー名@IPアドレス
ローカルコンピューターのターミナル(端末)で打ち込みます。
Ubuntuで、ユーザー名が初期設定通り「ubuntu」、IPアドレスが上記の通り「192.168.11.12」の場合、以下のようになります。
$ ssh ubuntu@192.168.11.12
すると、こちらの画面が出てきます。
The authenticity of host '192.168.11.12 (192.168.11.12)' can't be established.
ECDSA key fingerprint is SHA256:3T221vvTxxxxFCfY2xxxx9PQ3VH/8A/grIqSxGo.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.11.12' (ECDSA) to the list of known hosts.
yu@192.168.11.12's password:
真ん中あたりの「?」で、「yes」と入力し、最後の「password: 」に続いてパスワードを入れましょう。
文字を打ち込んでも画面は変わりませんが、そのまま打ち込みを進めてください
Welcome to Ubuntu 21.04 (GNU/Linux 5.11.0-1007-raspi aarch64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 updates can be applied immediately.
*** System restart required ***
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
ubuntu@raspi-desktop:~$
ターミナル上で、以下のように表示されれば、SSH接続は無事成功です!
ユーザー名@リモートコンピューター名:
SSH接続応用編: 鍵認証による接続 等
SSH接続の応用として、より高度な使い方をご説明します。
実際の現場では、セキュリティは高ければ高いほど良いので、より実践に近い知識として役立つはずです。
- 鍵認証の設定
- ポートの変更
- 設定ファイルの書き換え
- パスワード認証を許可しない
鍵認証の設定
パスワードによるアクセスではなく、公開鍵・秘密鍵による設定をおこないます。
一般的なパスワードより強固な鍵認証を使うことで、リモートサーバーへのアクセスをより安全におこなえるのです。
まずは鍵ペア(公開鍵と秘密鍵のペア)を作りましょう。
ssh-keygen -t ed25519 -f /保存したいパスとファイル名(例: /home/itc/.ssh/sshdir/id_ed25519
作成された鍵には、「.pub」拡張子がついているものとついていないものの2つがあります。
id_ed25519
id_ed25519.pub
.pubがついているものが公開鍵ですので、こちらをリモートサーバーに設置しましょう。
リモートサーバーの以下のディレクトリ、ファイルを作り、中身をコピーしていきます。
# フォルダ、ディレクトリ /home/ユーザー名/.ssh/authorized_keys
パスワードによる認証を活用し、SCPコマンドによるコピーがおすすめです。
ローカルコンピューターから以下を実施しましょう。
scp /home/.pubの場所 user@remotehost:/home/user/.ssh/authorized_keys
ただし既存に書かれているものがあると、上書きされてしまうので、別の方法でおこないましょう。
アクセスする際には、手元の秘密鍵を特定して、アクセスしましょう。
ローカルコンピューターのターミナルで以下を打ち込みます。
ssh -i 秘密鍵のパス リモートユーザー名@リモートIPアドレス(もしくはドメイン名)
ポートの変更
ここではアクセスするポートをデフォルトの22から変える方法をお伝えします。
変更がおすすめな理由は、デフォルトのままですと、ポート番号が明らかなため、攻撃を受ける可能性が高まるからです。
リモート、ローカルそれぞれでやることがありますので、簡潔に説明します。
リモートでやること
リモートの/etc/ssh/sshd_configを変更する
nano /etc/ssh/sshd_config
#以下の行を探して変更
Port 2222
# ポート番号は空いているお好きな番号で良いです。
リモートでSSHデーモンを再起動
sudo systemctl restart sshd
ローカルでやること
SSHコマンドでポートを指定します。
ssh -p 2222 ユーザー名@ホスト名
秘密鍵ファイルを指定する-iオプションなどと組み合わせるととても長いコマンドになってしまいます。
次章ではローカルの設定ファイルを書き換えて、コマンドをシンプルにできるような方法をお伝えします。
設定ファイルの書き換え
ローカルのSSHファイルを書き換える(なければ作る)ことで、設定の変更が可能です。
設定を書き換えれば、いちいち長いコマンドを打ち込む必要がなくなります。
設定ファイルを開く
nano ~/.ssh/config
必要な情報を記述する。
Host myserver
HostName remotehost
Port 2222
User myuser
IdentityFile /path/to/private_key
パスワード認証を許可しない
鍵による認証が完了したら、パスワード認証を拒否することで、より安全性が高まります。
ただし、鍵認証が正しくできていないと、アクセスできないことになりますので、確実に完了を確認してください。
パスワード認証を拒否するには、リモートのsshd_configで以下のように設定します。
PasswordAuthentication no
PermitRootLogin without-password
必ず最後に再起動をして、変更を反映させましょう。
まとめ
ローカルコンピューターからリモートコンピューターへSSH接続をするために、以下をターミナルで入力することを覚えておきましょう。
$ ssh ユーザー名@リモートコンピューターのIPアドレス
ただしひとつ注意しとくべき点は、リモートコンピューターへアクセスするのはターミナル上からとなり、ファイル、フォルダ名が日本語だと少し不便だということ。
別記事にて、日本語表記を英語表記に変更する方法をお伝えしますので、「フォルダ名が日本語になってる!」という方は参考に英語表記へ変更してください。
さて、次回はいよいよWebアプリを公開するためのWebサーバーをUbuntu上に準備していきます。
SSH接続をして次回の記事へ臨みましょう!