diadia

興味があることをやってみる。自分のメモを残しておきます。

ssh周りを整理する

sshがよく分からなかったのでそのへんを調べなおす。
wikipediaによると、以下のようにまとめられる。

SSHはSecureShellのことでリモートコンピュータと通信するためのプロトコルである。ネットワーク上のすべての通信が暗号化される。SSHは共通の鍵を用いて暗号化し、盗聴を防ぐ。SSHは種類がある。最も普及しているのがOpenSSHで、Linuxで標準的に利用される。(標準搭載されているってこと?)。現在単にSSHというとOpenSSHの実装系を指す。またSSHは、SSHサーバーとSSHクライアントに分類ができる。

SSHサーバー:OpenSSH, SHH Tectia Server, Reflection for Secure IT
SSHクライアント:OpenSSH, PuTTY, XShell, TeraTerm

//サーバとクライアントのによる分類    

SSH----SSHサーバー ------- OpenSSH 
     |                 |-- SHH Tectia Server
     |                 |-- Reflection for Secure IT
     |
     |-SSHクライアント---- OpenSSH
                       |-- PuTTY 
                       |-- XShell
                       |-- TeraTerm
    

これらのことを踏まえると、SSHをドキュメントから調べたり、本で学習する際はSSHなるものを探すのではなく、その具体的なSSHの祖父手ウェア名を探すことが必要なのだろう。こういう背景からOpneSSHのドキュメントを読むに至った。 ドキュメント:https://www.openssh.com/

 

前提:そもそもなんでSSHが必要になるのか

自分のケースではデプロイに関係する。ローカルで開発したアプリケーションをデプロイするにはリモートのサーバーにファイルを送信すること、リモートサーバーでそのアプリを実行状態に操作することが出来なければならない。このリモート操作にSSHを使う。

OpenSSHの構成

ドキュメントに書いてあるとおり、OpenSSHは以下のツールで構成されているになる。

1. リモート操作を司るssh, scp, sftp    
2. 鍵の管理ツールであるssh-add, ssh-keysign, ssh-keyscan, ssh-keygen
3. サービスをつかさどるsshd, sftp-server, ssh-agent

OpenSSHのドキュメントの主要要素は各コマンドの簡単な説明とそのコマンドオプションについて説明してある。

sshコマンドについて新たに分かったこと。ドキュメント:https://man.openbsd.org/ssh.1

sshはリモートでマシンにログインし、リモートでマシンにコマンドを実行するソフトウェアである。クライアントとホストは暗号化によって安全な通信が得られる。

-i identity_file オプション

Selects a file from which the identity (private key) for public key authentication is read. The default is ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ecdsa_sk, ~/.ssh/id_ed25519, ~/.ssh/id_ed25519_sk and ~/.ssh/id_rsa. Identity files may also be specified on a per-host basis in the configuration file. It is possible to have multiple -i options (and multiple identities specified in configuration files). If no certificates have been explicitly specified by the CertificateFile directive, ssh will also try to load certificate information from the filename obtained by appending -cert.pub to identity filenames.

-iコマンドを使わないとデフォルトで適当な鍵が使用される、という仕様はどこかで見たことがあったが、ドキュメントに書いてあることを認識した。-iオプションでは公開鍵に対してどの秘密の鍵を使うかを指定する。指定しない場合はデフォルトで~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ecdsa_sk, ~/.ssh/id_ed25519, ~/.ssh/id_ed25519_sk, ~/.ssh/id_rsa.が使われる。

SSHとそれに関連するファイル、コマンドについて

sshd...クライアントからの接続を待つ。サービス(デーモン)。sshd_configの内容によって挙動が制御される。またsshdコマンドで挙動を制御することもできるようだ。
参考:https://man.openbsd.org/sshd#DESCRIPTION

sshd_config...sshdの挙動を制御する設定ファイル。sshdは/etc/ssh/sshd_configを読みこむ。sshd_configの仕組みは1つの設定項目につき1行で設定される。ある設定を意味するキーワードとその値で1行が構成される。#で始まる行は設定内容として反映されない。
参考:https://man.openbsd.org/sshd_config#DESCRIPTION

sshdsshd_configはSSHサーバー側のものである。

ssh-keygen...認証キーの生成、管理、および変換を司るコマンド。クライアント(ローカル)側で認証キーを作成し、認証キーのうち公開鍵(.pub)をサーバー側に渡す。このファイルの内容はauthorized_keysに書き込む流れになる。

authorized_keys...サーバー側の認証ファイル。ここに記載されたリストの内容は、認証キーを使ってログインすることができる。ログイン認証はクライアント側が秘密鍵をサーバーに渡し、サーバー側は公開鍵(パブリックキー)を使い認証可否を判断する。

別の言い方をすればauthorized_keysファイルには公開鍵の内容が書かれている。この公開鍵に対応した秘密の鍵をクライアントがサーバーに渡したときにクライアントは認証される。以下のコマンドはsshのサーバー環境を整える時に使う。単に公開鍵をauthorized_keys内に記入しているに過ぎない。

mkdir .ssh
chmod 700 .ssh
cat id_rsa.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys


参考:https://man.openbsd.org/ssh.1#AUTHENTICATION