🚀 ニフティ’s Notion

【サーバー運用入門2025 #2】sshのお作法

🏁この章の目指すところ🏁
sshの使い方がわかるようになる
社内のsshに関するハマりポイントを聞いたことがある状態にする
sshを使うときに便利なツールやプログラムを聞いたことがある状態にする

sshについて

一般的な座学
sshとは
  • S ecure Sh ellの略でSSH
  • ネットワーク経由で他のコンピュータに接続し、遠隔操作するための仕組み(プロトコル)
    • 通信内容が全部暗号化されるので安全
  • OpenSSH
    • sshプロトコルを使うためのオープンソースのソフトウェア
    • Unix/Linux OS でデフォルトでインストールされている
sshの仕組み
  • ユーザーがログインするまで
    • ホスト認証
      • 対象のサーバが本当にユーザがログインしたいサーバかどうかを確認
    • ユーザ認証
      • ユーザーが対象のサーバにログインできるかどうかを確認
ホスト認証の仕組み

クライアントが接続するサーバが正しいものかを確認する

  • ホスト認証の必要性
  • なりすましを防ぐ仕組み
    1. ホスト鍵
      1. ホスト鍵はホスト公開鍵とホスト秘密鍵に分かれており、 クライアント上には通常  known_hosts  と呼ばれるファイルがあり、 ここには特定の IPアドレス (とホスト名) をもつサーバのホスト公開鍵が登録されている。
      2. ホスト秘密鍵はサーバのディスクに格納されている
    2. クライアントは known_hosts に登録されている公開鍵とホストから送られてくる公開鍵を照合,サーバが対応する秘密鍵を持っているかを確認する
  • ホスト認証は通常 (最初の 1回目を除いて) クライアントによって自動的に行われる.
    • ホスト認証を行うにはログイン先のホスト公開鍵をあらかじめ知っている必要がある
    • 1回目はクライアントはサーバが送ってきたホスト公開鍵の 指紋  (fingerprint) をユーザに提示し、 これが本当にユーザの接続したいサーバのものであるかどうか確認を求める
    • ちゃんとするなら指紋が正しいかどうかをサーバ管理者などに問い合わせる必要がある
    • サーバのsshdをアップデートする際には以前と同じホスト鍵を使わないと第三者がなりすましているように見えてしまう.
      • このような表示になるため接続しないようにする

ユーザ認証の仕組み

サーバがユーザーが正しいかを確認する

  • クライアントが正しいサーバを確認したら、つぎはサーバのほうが 正しいユーザかどうかを確認する。 OpenSSH のユーザ認証には大きく分けて 2つの方式がある.
    1. ユーザがあらかじめ登録したパスワードを使った認証 (パスワード認証)
    2. ユーザがあらかじめ登録した秘密鍵・公開鍵ペアを使った認証 (公開鍵認証)
  • パスワード認証はネットワーク上に流るため,公開鍵認証が推奨される
  • 公開鍵認証を使うと認証エージェントが使える

ssh config
  • ssh経由でのリモートサーバーの接続する際に利用される設定ファイル
    Host 任意の接続名
    HostName ホスト名
    User ユーザー名
    Port ポート番号
    一般的なフォーマット

ssh/configを設定することで↓のようなコマンドが

ssh ec2-user@サーバIPアドレス -p22

このように省略できる

ssh 任意の接続名
image block
喜びに震える人

configに設定して、先ほどのサーバにsshしてみましょう。

多段ssh
  • サーバを外部ネットワークに配置すると自分以外にも外部からの攻撃や不正なアクセスが試みられる。
    • そのため外部ネットワークを制御するために外部ネットワークと内部ネットワークの間に踏み台サーバを設置することある。
      image block

    • このような構成では目的のサーバにアクセスするために踏み台サーバに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】シェル操作とログ調査