目次
・SSHの使い方がわかるようになる
・SSH接続の基本と、安全に利用するための注意点を理解する
・SSHを使うときに便利なツールやプログラムを聞いたことがある状態にする
SSHについて
SSHとは
- Secure Shellの略でSSH
- ネットワーク経由で他のコンピュータに接続し、遠隔操作するための仕組み(プロトコル)
- 通信内容が全部暗号化されるので安全
- OpenSSH
- SSHプロトコルを使うためのオープンソースのソフトウェア
- Unix/Linux OS でデフォルトでインストールされている
SSHの仕組み
- ユーザーがログインするまで
- ホスト認証
- 対象のサーバが本当にユーザがログインしたいサーバかどうかを確認
- ユーザ認証
- ユーザーが対象のサーバにログインできるかどうかを確認
- ホスト認証
https://www.unixuser.org/~euske/doc/openssh/book/chap3.html
ホスト認証の仕組み
クライアントが接続するサーバが正しいものかを確認する
- ホスト認証の必要性
- 暗号を使わなかったら?
- 素のデータがネットワーク上を流れるので第三者に盗み聞きされる
出典: 入門OpenSSH / 第3章 OpenSSH のしくみ
https://www.unixuser.org/~euske/doc/openssh/book/chap3.html - クライアントとサーバ間を暗号化すると
- 第三者からの盗み聞きはできなくなるが……?
出典: 入門OpenSSH / 第3章 OpenSSH のしくみ
https://www.unixuser.org/~euske/doc/openssh/book/chap3.html - なりすましによるパスワード盗難
- 第三者が偽のサーバを仕掛けておいてパスワードを収集する手法がある
出典: 入門OpenSSH / 第3章 OpenSSH のしくみ
https://www.unixuser.org/~euske/doc/openssh/book/chap3.html
出典: 入門OpenSSH / 第3章 OpenSSH のしくみ
https://www.unixuser.org/~euske/doc/openssh/book/chap3.html
- 暗号を使わなかったら?
- なりすましを防ぐ仕組み
- ホスト鍵
- ホスト鍵はホスト公開鍵とホスト秘密鍵に分かれており、 クライアント上には通常
known_hostsと呼ばれるファイルがあり、 ここには特定の IPアドレス (とホスト名) をもつサーバのホスト公開鍵が登録されている - ホスト秘密鍵はサーバのディスクに格納されている
- ホスト鍵はホスト公開鍵とホスト秘密鍵に分かれており、 クライアント上には通常
- クライアントは
known_hostsに登録されている公開鍵とホストから送られてくる公開鍵を照合,サーバが対応する秘密鍵を持っているかを確認する
- ホスト鍵
- ホスト認証は通常 (最初の 1回目を除いて) クライアントによって自動的に行われる
- ホスト認証を行うにはログイン先のホスト公開鍵をあらかじめ知っている必要がある
- 1回目はクライアントはサーバが送ってきたホスト公開鍵の指紋 (fingerprint) をユーザに提示し、 これが本当にユーザの接続したいサーバのものであるかどうか確認を求める
- ちゃんとするなら、提示された fingerprint が管理者から共有された値と一致するか確認します
- サーバのsshdをアップデートする際には以前と同じホスト鍵を使わないと第三者がなりすましているように見えてしまう
ユーザ認証の仕組み
サーバがユーザーが正しいかを確認する
- クライアントが正しいサーバを確認したら、つぎはサーバのほうが 正しいユーザかどうかを確認する。 OpenSSH のユーザ認証には大きく分けて 2つの方式がある
- ユーザがあらかじめ登録したパスワードを使った認証 (パスワード認証)
- ユーザがあらかじめ登録した秘密鍵・公開鍵ペアを使った認証 (公開鍵認証)
- パスワード認証は、パスワード漏えいや総当たり攻撃への対策が重要になるため、一般的には公開鍵認証が推奨されます
秘密鍵でのSSH
SSHでは、パスワードの代わりに公開鍵認証を使うことができます。
適切に鍵を管理できる場合、パスワード認証より安全に運用しやすい方式です。
接続先ポート
SSHはデフォルトで22番ポートを使いますが、開いていることが推測されやすくセキュリティ的によろしくないため、運用方針によっては、デフォルト以外のポートを使うこともあります。
# pオプションでポートを指定
ssh ec2-user@<サーバIPアドレス> -p <ポート番号> 多段SSH
多段SSHとは、目的のサーバへ直接つながず、踏み台(中継)サーバにSSHして、そこからさらに目的のサーバへSSHする接続方式のこと。
- OpenSSHでは、こうした接続を簡単にする
ProxyJump/ProxyCommandというオプションがある - 踏み台サーバが果たす役割は複数ある
外部アクセスからの境界防御
- サーバを外部ネットワークに配置すると、自分以外にも外部からの攻撃や不正アクセスが試みられる
- そこで外部ネットワークと内部ネットワークの間に踏み台サーバを置き、外部から内部サーバへ直接到達できないようにする
アクセス統制・本人認証・証跡管理
内部ネットワーク側でも宛先サーバへ直接到達させず、踏み台を経由させるケースがある。以下のような目的がある。
- 本人認証:踏み台で認証を実施し、許可された人だけが通過できる
- アクセス統制:誰がどのサーバへ入れるかを制御
- 証跡管理:「誰が・いつ・どのサーバへ入ったか」を記録する
SSH Config
SSH経由でのリモートサーバー接続の際に利用される設定ファイル。
.ssh/configという設定ファイルを用意すると、↓のようなコマンドが
ssh ec2-user@<サーバIPアドレス> -p <ポート番号> このように省略できる。
ssh 任意の接続名
SSH Configを用いたSSH
.ssh/configの基本形は以下のようになっています。
1) .ssh/config の基本構成
Host 任意の接続名
Hostname ホスト名
User ユーザー名
Port ポート番号 scpについて
scpとは
- Secure Copy Protocolの略
- ネットワーク上に暗号化された伝送経路を構成するSSHの仕組みを利用して、ローカルとリモートサーバ間でセキュアにファイルを送受信する
- 他にもSSHを介してファイルを転送するプロトコルとしてSSH File Transfer Protocol(SFTP)があり、scpの方が軽量だが、SFTPの方が高機能とされている
- OpenSSH 9.0以降ではscpコマンドがSFTPプロトコルをデフォルトで使用するようになっている
scpでファイルをコピー
- ローカルサーバからリモートサーバへファイル転送
scp [コピー元のローカルファイル] [リモートサーバのユーザ]@[リモートサーバのIPorホスト名]:[コピー先のディレクトリ]/[ファイル名] - リモートサーバからローカルサーバへファイル転送
scp [リモートサーバのユーザ]@[リモートサーバのIPorホスト名]:[コピー元のファイルパス] [ローカルサーバのコピー先ディレクトリ]
scpでディレクトリをコピー
- ローカルサーバからリモートサーバへファイル転送
scp -r [コピー元のローカルファイル] [リモートサーバのユーザ]@[リモートサーバのIPorホスト名]:[コピー先のディレクトリ] - リモートサーバからローカルサーバへファイル転送
scp -r [リモートサーバのユーザ]@[リモートサーバのIPorホスト名]:[コピー元のファイルパス] [ローカルサーバのコピー先ディレクトリ]
ファイル送受信に便利なアプリケーション
ローカルとサーバでファイルのやり取りをする機会は意外とあって、その度に前節でやったscpコマンドを思い出すのはキツい。。。
実務では、用途に応じてファイル転送アプリケーションを使うこともあります。
ファイル転送のみならずファイル管理や操作ができるのでおすすめ。
WinSCP
- Windowsユーザー向け
Cyberduck
- macユーザー向け
他にも色々あるので好きなのを使えばいい
https://filezilla-project.org/
https://panic.com/jp/transmit/
