・ sshの使い方がわかるようになる
・ sshに関するハマりポイントを聞いたことがある状態にする
・ sshを使うときに便利なツールやプログラムを聞いたことがある状態にする
sshについて
一般的な座学
sshとは
- S ecure Sh ellの略でSSH
 - 
        
  
    
      
        
          
            ネットワーク経由で他のコンピュータに接続し、遠隔操作するための仕組み(プロトコル)
          
        
      
    
  
        
- 通信内容が全部暗号化されるので安全
 
 - 
        
  
    
      
        
          
            OpenSSH
          
        
      
    
  
        
- sshプロトコルを使うためのオープンソースのソフトウェア
 - Unix/Linux OS でデフォルトでインストールされている
 
 
sshの仕組み
- 
        
  
    
      
        
          
            ユーザーがログインするまで
          
        
      
    
  
        
- 
        
  
    
      
        
          
            ホスト認証
          
        
      
    
  
        
- 対象のサーバが本当にユーザがログインしたいサーバかどうかを確認
 
 - 
        
  
    
      
        
          
            ユーザ認証
          
        
      
    
  
        
- ユーザーが対象のサーバにログインできるかどうかを確認
 
 
 - 
        
  
    
      
        
          
            ホスト認証
          
        
      
    
  
        
 
ssh-agent
- 認証鍵を保持するプログラム
 - パスワードなしでssh接続が可能になる
 - 
        
  
    
      
        
          
            サーバ①からサーバ②にアクセスするとき、サーバ①に鍵を置かずにサーバ②にアクセスが可能になる
          
        
      
    
  
        
         
- 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 任意の接続名
        
  
        多段ssh
- 
        
  
    
      
        
          
            サーバを外部ネットワークに配置すると自分以外にも外部からの攻撃や不正なアクセスが試みられる
          
        
      
    
  
        
- 
        
  
    
      
        
          
            そのため外部ネットワークを制御するために外部ネットワークと内部ネットワークの間に踏み台サーバを設置することある
          
        
      
    
  
        
         
- このような構成では目的のサーバにアクセスするために踏み台サーバにsshして、そこからさらに目的のサーバにsshする必要がある
 
 - 
        
  
    
      
        
          
            そのため外部ネットワークを制御するために外部ネットワークと内部ネットワークの間に踏み台サーバを設置することある
          
        
      
    
  
        
 - 
        
  
    
      
        
          
            OpenSSHではこのようなssh接続に対して
          
        
      
    
  
  
ProxyJumpやProxyCommandというオプションがある 
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 emtg-scixxxx
        
  ssh 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ホスト名]:[コピー元のファイルパス] [ローカルサーバのコピー先ディレクトリ] 
使い方
- 
        
  
    
      
        
          
            準備: サーバに入って適当なファイルを作る(
          
        
      
    
  
  
{各自サーバの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 <- ファイルがあることを確認する - 
        
  
    
      
        
          
            ローカルから
          
        
      
    
  
  
    
      
        
          
            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/