・ sshの使い方がわかるようになる
・ 社内のsshに関するハマりポイントを聞いたことがある状態にする
・ sshを使うときに便利なツールやプログラムを聞いたことがある状態にする
sshについて
一般的な座学
sshとは
- S ecure Sh ellの略でSSH
-
ネットワーク経由で他のコンピュータに接続し、遠隔操作するための仕組み(プロトコル)
- 通信内容が全部暗号化されるので安全
-
OpenSSH
- sshプロトコルを使うためのオープンソースのソフトウェア
- Unix/Linux OS でデフォルトでインストールされている
sshの仕組み
-
ユーザーがログインするまで
-
ホスト認証
- 対象のサーバが本当にユーザがログインしたいサーバかどうかを確認
-
ユーザ認証
- ユーザーが対象のサーバにログインできるかどうかを確認
-
ホスト認証
ホスト認証の仕組み
クライアントが接続するサーバが正しいものかを確認する
-
ホスト認証の必要性
-
暗号を使わなかったら?
- 素のデータがネットワーク上を流れるので第三者に盗み聞きされる
-
クライアントとサーバ間を暗号化すると
- 第三者からの盗み聞きはできなくなるが…?
-
なりすましによるパスワード盗難
- 第三者が偽のサーバを仕掛けておいてパスワードを収集する手法がある
-
暗号を使わなかったら?
-
なりすましを防ぐ仕組み
-
ホスト鍵
-
ホスト鍵はホスト公開鍵とホスト秘密鍵に分かれており、 クライアント上には通常
known_hosts
と呼ばれるファイルがあり、 ここには特定の IPアドレス (とホスト名) をもつサーバのホスト公開鍵が登録されている。 - ホスト秘密鍵はサーバのディスクに格納されている
-
ホスト鍵はホスト公開鍵とホスト秘密鍵に分かれており、 クライアント上には通常
-
クライアントは
known_hosts
に登録されている公開鍵とホストから送られてくる公開鍵を照合,サーバが対応する秘密鍵を持っているかを確認する
-
ホスト鍵
-
ホスト認証は通常 (最初の 1回目を除いて) クライアントによって自動的に行われる.
- ホスト認証を行うにはログイン先のホスト公開鍵をあらかじめ知っている必要がある
- 1回目はクライアントはサーバが送ってきたホスト公開鍵の 指紋 (fingerprint) をユーザに提示し、 これが本当にユーザの接続したいサーバのものであるかどうか確認を求める
- ちゃんとするなら指紋が正しいかどうかをサーバ管理者などに問い合わせる必要がある
-
サーバのsshdをアップデートする際には以前と同じホスト鍵を使わないと第三者がなりすましているように見えてしまう.
- このような表示になるため接続しないようにする
ユーザ認証の仕組み
サーバがユーザーが正しいかを確認する
-
クライアントが正しいサーバを確認したら、つぎはサーバのほうが 正しいユーザかどうかを確認する。 OpenSSH のユーザ認証には大きく分けて 2つの方式がある.
- ユーザがあらかじめ登録したパスワードを使った認証 (パスワード認証)
- ユーザがあらかじめ登録した秘密鍵・公開鍵ペアを使った認証 (公開鍵認証)
- パスワード認証はネットワーク上に流るため,公開鍵認証が推奨される
- 公開鍵認証を使うと認証エージェントが使える
ssh config
-
ssh経由でのリモートサーバーの接続する際に利用される設定ファイル
Host 任意の接続名 HostName ホスト名 User ユーザー名 Port ポート番号
一般的なフォーマット
ssh/configを設定することで↓のようなコマンドが
ssh ec2-user@サーバIPアドレス -p22
このように省略できる
ssh 任意の接続名

configに設定して、先ほどのサーバにsshしてみましょう。
多段ssh
-
サーバを外部ネットワークに配置すると自分以外にも外部からの攻撃や不正なアクセスが試みられる。
-
そのため外部ネットワークを制御するために外部ネットワークと内部ネットワークの間に踏み台サーバを設置することある。
- このような構成では目的のサーバにアクセスするために踏み台サーバにsshして、そこからさらに目的のサーバにsshする必要がある。
-
そのため外部ネットワークを制御するために外部ネットワークと内部ネットワークの間に踏み台サーバを設置することある。
-
OpenSSHではこのようなssh接続に対して
ProxyJump
やProxyCommand
というオプションがある
scpについて
一般的な座学
- Secure Copyの略
- ネットワーク上に暗号化された伝送経路を構成して別のサーバを遠隔操作するsshのコマンドの一つで、ローカルとの間でセキュアにファイルを送受信する。
-
他にもsshを介してファイルを転送するプロトコルとしてSSH File Trancefer 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/
次へ
📄
【サーバー運用入門2025 #3】シェル操作とログ調査