SSHの使い方

4460 ワード

SSH(Secure Shell)は、リモートログイン、リモート実行コマンド、ポート転送などに使用される、安全でないネットワーク上に安全な伝送チャネルを構築する.telnet、rloginなどの不安全なログインプログラムに代わるように設計されています.
OpenSSHは最もポピュラーなSSHプロトコルの実装プログラムであり、ほとんどのLnuxシステムではデフォルトでインストールされ、Wndows 10ではデフォルトで使用されている.OpenSSHが提供する主なツールは
  • クライアントプログラム:ssh,scp,sftp
  • 鍵生成と管理:ssh-keygen,ssh-keysign,ssh-keysan,ssh-add
  • サーバ側プログラム:sshd,sftp-server,ssh-agent
  • 以前のバージョンのWndowsシステムでは、一般的にPuTTYをSSHのクライアントプログラムとして、WinSCPをリモートファイル交換プログラムとして使用していました.以下、OpenSSHのツールを用いて説明する.
    サーバ側sshd
    SSHはサーバ/クライアントアーキテクチャを使用し、リモートでアクセスされる機器はサーバ側プログラムsshdを実行する必要がある.sshdは、デフォルトではポート22を開いています.
    Arch LinuxがOpenSSHをインストールしてsshdサービスを起動する指令は以下の通りである.
    $ pacman -S openssh
    $ systemctl start sshd
    

    再起動後にsshdサービスを自動的に実行する場合は、次のコマンドを使用します.
    $ systemctl enable sshd
    
    sshdのプロファイルは、一般に/etc/ssh/sshd_configにあり、rootログインを許可するかどうか、他のポートを使用するかどうかなど、SSHサーバ側の操作を構成するために使用されます.
    リモートログイン/リモート実行命令
    サーバSがsshdサービスを有効にしている場合、以下のコマンドを使用して、ローカルデバイスLからサーバSにログインする.
    $ ssh user@remote_ip
    

    ここで、userはサーバS上のユーザ名であり、remote_ipはサーバSのIPアドレスである.サーバが標準のSSHポート22を使用せずにカスタムポートを構成している場合は、リモートログイン時に-pを使用してポート番号を指定する必要があります.
    $ ssh -p port user@remote_ip
    

    リモート端末を取得するのではなく、サーバ上で1つのコマンドを実行する必要がある場合は、次のコマンドを使用します.
    $ ssh user@remote_ip command
    

    ここで、commandは実行する必要がある命令であり、例えばssh user@remote_ip ls /tmp/はリモートサーバ上の/tmp/フォルダの内容をリストする.scpローカルデバイスとサーバ間の暗号化されたファイルコピーを実現します.具体的な使い方は後述しません.
    パスワードなしでログイン
    上記のリモートログイン/またはリモート実行命令操作を実行すると、対応するユーザー名のパスワードを入力するように毎回注意されます.インタラクティブな操作であれば、パスワード入力はキーボードを数回叩くだけの面倒です.ただし、スクリプトを作成して自動化する操作であれば、パスワード入力は適切ではありません.
    SSHは、公開鍵を使用してパスワードなしのログインを許可する.具体的には、ローカルデバイス上で秘密鍵/公開鍵ペアを生成し、公開鍵をリモートサーバにコピーすることで、この公開鍵暗号化通信チャネルを利用して、パスワードレスログインサーバを実現することができる.
  • ssh-keygenを用いる鍵
  • を生成する.
    $ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/local_user/.ssh/id_rsa):   #      
    Enter passphrase (empty for no passphrase):                    #         ,   
    Enter same passphrase again:                                   #     ,  
    Your identification has been saved in /home/local_user/.ssh/id_rsa.
    Your public key has been saved in /home/local_user/.ssh/id_rsa.pub.
    
    ssh-keygenは、まず、記憶鍵のファイル名の入力を要求し、デフォルトは/home/user/.ssh/id_rsaであり、その後、鍵を使用するパスワードの入力を要求する.この鍵を使用するパスワードは、ログインサーバのパスワードとは異なり、ログインサーバが許可されるかどうかを制御するのではなく、現在の鍵の使用を許可するかどうかを制御します.パスワードなしログインを実現するには、鍵を使用するパスワードを空にする必要があります.つまり、パスワードの入力を促すところで直接押す必要があります.
  • は、ssh-copy-idを使用するサーバ
  • に公開鍵をコピーする.
    $ ssh-copy-id user@remote_ip
    

    このコマンドを実行すると、リモートサーバに入力するログインパスワードが表示されます.公開鍵のコピーが完了したら、後でサーバにログインすればパスワードなしでログインできます.
  • 手動コピー公開鍵(ssh-copy-idと同様)手動コピー公開鍵は、ssh-copy-idの具体的な動作内容である.ローカルデバイス上の/home/local_user/.ssh/id_rsa.pubファイルをサーバにコピーし、上記のファイルの内容をサーバ上の/home/server_user/.ssh/authorized_keysファイルの末尾にコピーします.

  • ポート転送
  • -L
  • $ ssh -L port0:localhost:port1 user@remote_ip
    

    ローカルデバイスのIPアドレスをlocal_とするipは、local_ip:port1に送信されたデータをremote_ip:port0、すなわちlocal_ip:port1 --> remote_ip:port0に転送する.
  • -R
  • $ ssh -R port0:localhost:port1 user@remote_ip
    

    ローカルデバイスのIPアドレスをlocal_とするipは、remote_ip:port1に送信されたデータがlocal_ip:port0、すなわちlocal_ip:port1 。に転送される
    逆SSHトンネル
    $ ssh -f -N -T -R port0:localhost:22 user@remote_ip
    
  • -f:ssh接続許可後バックグラウンド運転
  • に入る
  • -N:遠隔命令
  • を実行しない
  • -T:インタラクティブ端末を作成しないローカルデバイスのIPアドレスをlocalと仮定するip、remote_に接続ip:port 0は、local_ip:22、すなわちsshポートに接続されている.したがって、ssh -p port0 user@remote_ipssh user@local_ipに相当する.この使い方はremote_ipはパブリックIP、local_ipがイントラネットIPの場合、とても役に立ちます.逆SSHトンネルを使用すると、イントラネットIPアドレスのデバイスがパブリックネットワークに露出し、どのデバイスからもイントラネットデバイスにアクセスできるようになります.

  • autossh
    ネットワーク接続が不安定なため、トンネルが中断します.この場合、autosshを使用して自動的に再接続することができる.autosshのパラメータはsshと同じです.
    リファレンス
  • OpenSSH
  • Wikipedia-Secure Shell
  • StackExchange-Reverse SSH Tunneling