🚀 ニフティ’s Notion

【サーバ運用入門2024 #1】sshのお作法

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

sshについて

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

  • ssh-agentに鍵を登録
ssh-add [鍵の場所]
  • ssh-agentに登録された鍵の確認
ssh-add -l

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

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

ssh -i ~/Downloads/emtg-server-ope-2024.pem ec2-user%{public ip}:22@192.0.2.0 -p22

このように省略できる

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

    • このような構成では目的のサーバにアクセスするために踏み台サーバにsshして、そこからさらに目的のサーバにsshする必要がある
  • OpenSSHではこのようなssh接続に対して ProxyJump ProxyCommand というオプションがある

Icon
多段sshをやってみよう!
~/.ssh/configを次のように書き換える

chmod 600 ~/Downloads/emtg-server-ope-2024-admin.pem
ssh-add ~/Downloads/emtg-server-ope-2024-admin.pem
Host emtg-scixxxx
  HostName 192.0.2.0
  User ec2-user%{自分のサーバip}:22
  Port 22
  AddKeysToAgent yes
  IdentityFile ~/Downloads/emtg-server-ope-2024.pem
  LocalForward 0.0.0.0:10013 192.0.2.2:22


Host emtg-admin
  HostName 127.0.0.1
  User ec2-user
  Port 10013
  IdentityFile ~/Downloads/emtg-server-ope-2024-admin.pem
.ssh/config
自分のサーバにssh接続をする
ssh emtg-scixxxx
ターミナル1
別端末から共用サーバにssh接続をする
ssh emtg-admin
ターミナル2
💡
ssh-agentを使っているため踏み台サーバに鍵を置くことなくemtg-adminにアクセスできる

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ホスト名]:[コピー元のファイルパス] [ローカルサーバのコピー先ディレクトリ]

使い方
  1. 準備: サーバに入って適当なファイルを作る( {各自サーバのIPアドレス} を置き換えて使ってください)
    [ローカル ~]$ ssh -i ~/downloads/emtg-server-ope-2024.pem ec2-user%{各自サーバのIPアドレス}:22@192.0.2.0 -p22
    
    [ec2-user@hogehoge ~]$ vi test.txt
    
    (iを押して編集モードへ)
    何か適当に文字を入れる
    (ctrl + c もしくはEscで編集モードを終了)
    (:wqを入力しEnterで保存)
    
    [ec2-user@hogehoge ~]$ ls
    test.txt <- ファイルがあることを確認する
  2. ローカルから scpしてみる(別のターミナルを開く)
    今回のコマンドは、リモート→ローカルでファイル転送するもの。
    [ローカル ~]$ scp -i ~/downloads/emtg-server-ope-2024.pem -P 22 -A -o user=ec2-user%{各自サーバのIPアドレス}:22 192.0.2.0:~/test.txt ~/test.txt
    
    test.txt                                                                       100%   34     1.5KB/s   00:00 <-ファイルが転送される
便利なアプリケーション

ローカルとサーバでファイルのやり取りをする機会は意外とあって、その度に前節でやったscpコマンドを思い出すのはキツい。。。

ということでニフティ社内ではアプリケーションを使ってローカルとサーバでファイルのやり取りをしているケースが多いです。

ファイル転送のみならずファイル管理や操作ができるのでおすすめ

WinSCP

  • windowsユーザー向け

Cyberduck

  • macユーザー向け

他にも色々あるので好きなのを使えばいい

https://filezilla-project.org/

https://panic.com/jp/transmit/