Linuxサービス管理-OpenSSH基礎操作

13626 ワード

文書ディレクトリ
  • 1. SSHを使用してリモートコマンドライン
  • にアクセスする
  • 1.1 OpenSSH概要
  • 1.2 SSHバージョン
  • 1.3 SSH認証方式
  • 1.4 openSSHの動作モード
  • 1.4 Secure Shell例
  • 1.5 SSHホスト鍵
  • 2. SSH鍵に基づく認証
  • の構成
  • SHH鍵デモ
  • 3. カスタムSSHサービス構成
  • 4. SSH安全注意事項
  • 1.SSHを使用してリモートコマンドラインにアクセスする
    1.1 OpenSSHの概要
    OpenSSHという用語は、システムで使用されるSecure Shellソフトウェアのソフトウェア実装を指す.リモートシステム上でshellを安全に実行するために使用します.sshサービスを提供できるリモートLinuxシステムにユーザーアカウントがある場合、sshは通常、システムにリモートログインするためのコマンドです.sshコマンドは、リモートシステムでコマンドを実行するためにも使用できます.
    一般的なリモートログインツールは次のとおりです.
  • telnet
  • ssh
  • dropbear
  • telnet //      ,23/TCP
            
              
    
    ssh //Secure SHell,     ,22/TCP
                     ,    
                
                
        
    dropbear //        SSH          
    

    1.2 SSHバージョン
    Opensshには、v 1とv 2の2つのバージョンがあり、その特徴は以下の通りです.
    v 1:CRC-32に基づいてMACを行い、仲介者(man-in-middle)がv 2を攻撃することを防ぐことができない:双方のホストプロトコルは安全なMAC方式を選択する.DHアルゴリズムに基づいて鍵交換を行い、RSAまたはDSAアルゴリズムに基づいてアイデンティティ認証を実現する
    1.3 SSH認証方式
    Opensshには、次の2つの認証方法があります.
  • パスワード認証に基づく
  • 鍵認証に基づく
  • 1.4 OpenSSHの動作モード
    OpenSSHはC/Sアーキテクチャに基づいて動作する.
         //sshd,     /etc/ssh/sshd_config
        //ssh,     /etc/ssh/ssh_config
        ssh-keygen //     
        ssh-copy-id //           
        scp //         
    

    1.4 Secure Shellの例
    現在のユーザーとしてリモートインタラクティブshellを作成し、終了時にexitコマンドを使用して前のshellに戻ります.root@wangyitongサーバ、root@wytカスタマーサービス
    [root@wangyitong ~]# cd .ssh/ 
    [root@wangyitong .ssh]# ls
    [root@wangyitong ~]# ssh 192.168.232.130
    The authenticity of host '192.168.232.130 (192.168.232.130)' can't be established.
    ECDSA key fingerprint is SHA256:voKhqjd5NK4uric2TBojJduledynIE/jXeR714ZEnL0.
    ECDSA key fingerprint is MD5:9f:87:25:25:b2:2d:d8:06:5c:d2:ce:34:a3:f9:06:5f.
    Are you sure you want to continue connecting (yes/no)? yes  //    
    Warning: Permanently added '192.168.232.130' (ECDSA) to the list of known hosts.
    [email protected]'s password:    //        
    Last login: Mon Apr 27 23:42:55 2020 from 192.168.232.128
    [root@wangyitong ~]# ip a
    1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:c4:7b:97 brd ff:ff:ff:ff:ff:ff
        inet 192.168.232.130/24 brd 192.168.232.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fec4:7b97/64 scope link 
           valid_lft forever preferred_lft forever
    [root@wyt ~]# exit  //    
    logout
    Connection to 192.168.232.130 closed.
    [root@wangyitong ~]# ip a
    1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:a5:4f:e1 brd ff:ff:ff:ff:ff:ff
        inet 192.168.232.128/24 brd 192.168.232.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fea5:4fe1/64 scope link 
           valid_lft forever preferred_lft forever
    [root@wangyitong ~]# cd .ssh/
    [root@wangyitong .ssh]# ls
    known_hosts  
    [root@wangyitong .ssh]# cat known_hosts  
    192.168.232.130 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNixbkHAiICvnjEUJXJPLFMxuhRN3PEYDDDnUtKYjK4Wg9z+59f1fZC/AlDk0I0LKDN6RCmbw2Z0Bb7cSTwLsrY=
    

    リモートshellに他のユーザとして選択したホストに接続し、root@wangyitongサーバ、root@wytカスタマーサービス
    [[tom@wangyitong ~]$ ssh [email protected] //tom        
    [email protected]'s password: 
    Last login: Tue Apr 28 00:27:58 2020 from 192.168.232.128
    [root@wyt ~]# ip a
    1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:c4:7b:97 brd ff:ff:ff:ff:ff:ff
        inet 192.168.232.130/24 brd 192.168.232.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fec4:7b97/64 scope link 
           valid_lft forever preferred_lft forever
    [root@wyt ~]# exit
    logout
    Connection to 192.168.232.130 closed.
    

    リモートユーザとしてリモートホスト上で出力をローカルディスプレイに戻すことで単一のコマンドを実行し、root@wangyitongサーバ、root@wytカスタマーサービス
    [root@wangyitong ~]# ssh [email protected] 'touch abc' //  root           
    [email protected]'s password: 
    [root@wangyitong ~]# 
    [root@wyt ~]# ls
    anaconda-ks.cfg
    [root@wyt ~]# ls
    abc anaconda-ks.cfg
    

    wコマンドは、現在コンピュータにログインしているユーザーのリストを表示します.これは、sshを使用してどのリモート・ロケーションからログインしたか、どの操作を実行したかなどを表示するのに特に役立ちます.
    [root@wyt ~]# w
     01:11:28 up 2:13, 2 users, load average: 0.00, 0.01, 0.01
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    root tty1 22:59 2:12m 0.02s 0.02s -bash
    root pts/1 192.168.232.1 01:04 0.00s 0.02s 0.01s w
    

    1.5 SSHホストキー
    sshは、公開鍵暗号化によって通信セキュリティを維持する.あるsshクライアントがsshサーバに接続されると、クライアントがログインする前に、サーバは公開鍵のコピーを送信します.これは、通信チャネルのセキュリティ暗号化を設定し、クライアントのサーバを検証するために使用できます.
    ユーザがsshを用いる特定のサーバに初めて接続する場合、sshコマンドはユーザの/.ssh/known_hostsファイルには、サーバの公開鍵が格納されます.その後、クライアントは、ユーザが接続するたびに、比較/を通過する.ssh/known_hostsファイルのサーバエントリとサーバから送信された公開鍵は、サーバから同じ公開鍵が得られることを保証します.公開鍵が一致しない場合、クライアントは、ネットワーク通信がハイジャックされたか、サーバが侵入したと仮定し、接続を中断します.
    これは、サーバの公開鍵が変更する(ハードディスク(HDD)の故障により公開鍵が失われたり、何らかの正当な理由で公開鍵が置き換える)場合、ユーザが更新する必要があることを意味する.ssh/known_hostsファイルを削除してからログインできます.
    ホストIDは、ローカルクライアントシステム上の~/に格納.ssh/known_hostsで
    [root@wangyitong .ssh]# cat .ssh/known_hosts 
    192.168.232.130 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNixbkHAiICvnjEUJXJPLFMxuhRN3PEYDDDnUtKYjK4Wg9z+59f1fZC/AlDk0I0LKDN6RCmbw2Z0Bb7cSTwLsrY=
    

    ホストキーSSHサーバに格納されている/etc/ssh/ssh_host_key*中
    [root@wangyitong ~]# ls /etc/ssh/*key*
    /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key.pub
    /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_rsa_key
    /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key.pub
    

    2.SSH鍵に基づく認証の構成
    ユーザは、公開鍵認証を使用してsshログイン認証を行うことができる.sshは、ユーザが秘密鍵公開鍵スキームを使用して認証を行うことを可能にする.これは、秘密鍵と公開鍵の2つの鍵が生成されることを意味する.秘密鍵ファイルは認証証明書として使用され、パスワードのように適切に保管しなければならない.公開鍵は、秘密鍵を検証するためにユーザーがログインしたいシステムにコピーされます.公開鍵は秘密にする必要はありません.公開鍵を持つsshサーバは、秘密鍵を持っているシステムのみが解決できる問題をパブリッシュできます.従って、保有する鍵に基づいて検証することができる.これにより、システムにアクセスするたびにパスワードを入力する必要はありませんが、セキュリティは保証されます.
    ssh-keygenコマンドを使用してパスワードを生成します.秘密鍵が生成する.ssh/id_rsaと公開鍵/.ssh/id_rsa.pub.
    注意:
    鍵を生成すると、秘密鍵にアクセスするときにパスワードを指定するオプションが提供されます.秘密鍵が盗まれた場合、パスワードを使用して保護されているため、発行者以外の誰も秘密鍵を使用することは難しい.これにより、攻撃者が秘密鍵を解読して使用する前に、新しい鍵ペアを生成し、古い鍵に関連するすべてのコンテンツを削除するのに十分な時間がかかる.
    ssh鍵を生成すると、鍵はデフォルトでホームディレクトリの下に格納.ssh/ディレクトリ.秘密鍵と公開鍵の権限はそれぞれ600と644である.sshディレクトリ権限は700でなければなりません.
    [root@wangyitong .ssh]# ll
    total 12
    -rw-------. 1 root root 1675 Apr 28 01:40 id_rsa
    -rw-r--r--. 1 root root 397 Apr 28 01:40 id_rsa.pub
    -rw-r--r--. 1 root root 177 Apr 27 23:42 known_hosts
    [root@wangyitong .ssh]# ll -d .
    drwx------. 2 root root 57 Apr 28 01:40 .
    

    鍵ベースの認証が使用できる前に、公開鍵をターゲットシステムにコピーする必要があります.ssh-copy-idを使用してこの操作を完了できます.
    [root@localhost ~]# ssh-copy-id [email protected]
    

    鍵をssh-copy-idで別のシステムにコピーする場合、デフォルトでは~/がコピーされる.ssh/id_rsa.pubファイル
    SHH鍵のデモ
    ssh-keygenを使用して公開鍵-秘密鍵ペアを作成します.root@wangyitongサーバ
    [root@wangyitong ~]# ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:aEQuqe9Lm54Na7ZcjiavBwupxRqVRQv4rXYSbzZWPfk root@wangyitong
    The key's randomart image is:
    +---[RSA 2048]----+
    | .... . |
    |. ..= |
    | . ++ o. . |
    | =..o..+ |
    | +.+ .o So |
    |+ B.B. E |
    |.* O+.. |
    |o o+=@ |
    | .X&oo |
    +----[SHA256]-----+
    [root@wangyitong ~]# cd .ssh/
    [root@wangyitong .ssh]# ls
    id_rsa id_rsa.pub known_hosts
    

    ssh-copy-idを使用して公開鍵をリモートシステム上の正しい位置にコピーします.root@wangyitongサーバ
    [root@wangyitong ~]# ssh-copy-id [email protected]
    /bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    /bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    [email protected]'s password: 
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with: "ssh '[email protected]'"
    and check to make sure that only the key(s) you wanted were added.
    

    sshコマンドを使用してリモートホストにコマンドなしでログインし、root@wangyitongサーバ、root@wytカスタマーサービス
    [root@wangyitong ~]# ssh [email protected]
    Last login: Tue Apr 28 01:04:14 2020 from 192.168.232.1
    [root@wyt .ssh]# exit
    logout
    Connection to 192.168.232.130 closed.
    [root@wangyitong ~]# ll .ssh/ //            
    total 12
    -rw-------. 1 root root 1675 Apr 28 01:40 id_rsa
    -rw-r--r--. 1 root root 397 Apr 28 01:40 id_rsa.pub
    -rw-r--r--. 1 root root 177 Apr 27 23:42 known_hosts
    [root@wangyitong ~]# cat .ssh/id_rsa.pub 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQItatjWGjHmCh37vAyzanmcosSUonPtWH8KFxC/nI8ly6YfkMYDwnf7/SlGCkXt+aurtmXLiEUy4L4miDBIzOlyHQHXGb/2ZmjImxiGMJ6fJVmZZF/n5pgAabY1CiiR9YBheIXLgAvWmTWY9f6YDj4Tdsmtj24BQ5H59HF2oPYlmZ/v+gJqBtgiI3ugSq0EYi+xYSZME/XLQjq6U5o/tXXL2C1PdeIYuy5uFjSCmhoi9xQWKbd68tTHX8yTsHZiWpzF3FfNjo+ltRb6pIl154rGkY0ge9PHNCQJanZGFKZ9+Bj0bTjprKpWwFEDRvgrC4avudP3ic1KsGXmihK8QN root@wangyitong
    [root@wyt ~]# cd .ssh/
    [root@wyt .ssh]# ll  //  .ssh  
    total 4
    -rw------- 1 root root 397 Apr 28 02:00 authorized_keys
    [root@wyt .ssh]# ls
    authorized_keys
    [root@wyt .ssh]# cat authorized_keys 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQItatjWGjHmCh37vAyzanmcosSUonPtWH8KFxC/nI8ly6YfkMYDwnf7/SlGCkXt+aurtmXLiEUy4L4miDBIzOlyHQHXGb/2ZmjImxiGMJ6fJVmZZF/n5pgAabY1CiiR9YBheIXLgAvWmTWY9f6YDj4Tdsmtj24BQ5H59HF2oPYlmZ/v+gJqBtgiI3ugSq0EYi+xYSZME/XLQjq6U5o/tXXL2C1PdeIYuy5uFjSCmhoi9xQWKbd68tTHX8yTsHZiWpzF3FfNjo+ltRb6pIl154rGkY0ge9PHNCQJanZGFKZ9+Bj0bTjprKpWwFEDRvgrC4avudP3ic1KsGXmihK8QN root@wangyitong
    

    scpコマンドを使用してファイルをリモートホストに転送し、root@wangyitongクライアント、root@wytサーバ
    [root@wyt ~]# cd .ssh/
    [root@wyt .ssh]# ll
    total 12
    -rw------- 1 root root 397 Apr 28 02:00 authorized_keys
    -rw------- 1 root root 1679 Apr 28 02:14 id_rsa
    -rw-r--r-- 1 root root 390 Apr 28 02:14 id_rsa.pub
    [root@wyt .ssh]# scp id_rsa.pub [email protected]:/root/.ssh/authorized_keys //          
    [email protected]'s password: 
    id_rsa.pub 100% 390 178.9KB/s 00:00   
    [root@wangyitong ~]# cd .ssh/
    [root@wangyitong .ssh]# ll
    total 16
    -rw-r--r--. 1 root root 390 Apr 28 02:16 authorized_keys
    -rw-------. 1 root root 1675 Apr 28 01:40 id_rsa
    -rw-r--r--. 1 root root 397 Apr 28 01:40 id_rsa.pub
    -rw-r--r--. 1 root root 177 Apr 27 23:42 known_hosts
    [root@wangyitong .ssh]# chmod 600 authorized_keys //    
    [root@wangyitong .ssh]# ll
    total 16
    -rw-------. 1 root root 390 Apr 28 02:16 authorized_keys
    -rw-------. 1 root root 1675 Apr 28 01:40 id_rsa
    -rw-r--r--. 1 root root 397 Apr 28 01:40 id_rsa.pub
    -rw-r--r--. 1 root root 177 Apr 27 23:42 known_hosts 
    [root@wyt .ssh]# ssh [email protected]
    Last login: Tue Apr 28 01:40:12 2020
    root@wangyitong ~]# ls
    abc anaconda-ks.cfg list text
    [root@wyt ~]# ls
    abc anaconda-ks.cfg
    [root@wangyitong ~]# scp list 192.168.232.130:/root/  //    
    list 100% 338 75.4KB/s 00:00 
    [root@wyt ~]# ls
    abc anaconda-ks.cfg list
    [root@wangyitong ~]# scp -r /tmp 192.168.232.130:/root/  //    
    [root@wyt ~]# ls
    abc anaconda-ks.cfg list tmp
    

    scpコマンドを使用してリモートホストからローカルにファイルをダウンロードし、root@wangyitongクライアント、root@wytサーバ
    [root@wyt ~]# ls
    abc anaconda-ks.cfg hehe list tmp
    [root@wangyitong ~]# scp [email protected]:/root/hehe .
    hehe 100% 6 3.7KB/s 00:00    
    [root@wangyitong ~]# ls
    abc anaconda-ks.cfg hehe list text
    

    scpコマンドの一般的なオプション
        -r //    
        -P //    
        -p //  
        -q //    
        -a //    
    

    3.SSHサービス構成のカスタマイズ
    OpenSSHサーバは通常変更する必要はありませんが、プロファイル/etc/ssh/sshd_configでOpenSSHサーバの各方面を修正します.
    Port 22 //     ,   22
    ListenAddress 0.0.0.0 //     IP  
    PermitRootLogin {yes|no} //    root        
    PermitRootLogin without-password //   root            
    PasswordAuthentication {yes|no} //          ,    
    

    4.SSH安全注意事項
  • パスワードは常に変更され、十分に複雑である必要があります.
    [root@wangyitong ~]# tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 |xargs //  30    
    LYH9cbirdT6E_hbColMFjZNf9Kd6If
    
    [root@wangyitong ~]# openssl rand 20 -base64
    Di9ry+dyV40xVvBHirsc3XpBOzg= //  20     
    
  • 非デフォルトポート
  • を使用
  • ログインクライアントアドレス
  • を制限する.
  • 特定のIPアドレス
  • のみを傍受する.
  • 管理者の直接登録を禁止する
  • ユーザ登録制限
  • のみが許可する.
  • AllowUsers
  • AllowGroups
  • 鍵ベースの認証
  • を使用する.
  • 空のパスワードの使用を禁止
  • SSHv 1バージョン
  • の使用を禁止
  • アイドルセッションタイムアウト時間
  • を設定する.
  • ファイアウォールによるsshアクセスポリシーの設定
  • sshのアクセス頻度と同時オンライン数を制限
  • ログのバックアップを行い、よく分析(あるサーバに集中)