転載・引用について

ユーザ用ツール

サイト用ツール


サイドバー

Site Contents Index

転載・引用について

RSS

tweet:2019:0925_01

sshに関するメモ

SSHに関するメモをとりあえず。

ssh とは

sshは、Secure Shell から名前をとった、リモート端末との通信を行うためのプロトコル、コマンドのことをいう。

  • 大本に、rsh(remote shell)がある。rshは、Remote Shellから名前をとったもの
    • 他に、telnetやrloginなどもある。何れにしても暗号化などの保護はない。なお、telnetにSSL/TLSを組み合わせたtelnetsもあるが、ほぼ利用されていない。
  • rshには、通信保護の機構はなく、通信内容はRPCを利用し、生データが流れていた
  • sshでは、RPCを利用することをやめ、ssh daemonとssh client間で暗号化された通信路を用いてデータをやりとりする

sshはRFCにより仕様が規定および公開されている。

  • RFC 4250 : The Secure Shell (SSH) Protocol Assigned Numbers
  • RFC 4251 : The Secure Shell (SSH) Protocol Architecture
  • RFC 4252 : The Secure Shell (SSH) Authentication Protocol
  • RFC 4253 : The Secure Shell (SSH) Transport Layer Protocol
  • RFC 4254 : The Secure Shell (SSH) Connection Protocol
  • RFC 4255 : Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints
  • RFC 4256 : Generic Message Exchange Authentication for the Secure Shell Protocol (SSH)

とりあえずのメモ

以下、CEoR改を実装するために必要となりそうなsshの機能のみに限定してメモを記載する

対象とする実装は、 OpenSSH とする。これは、CEoRで管理をしたい対象がFreeBSD/OpenBSD/Linux系のOS環境であり、これらには標準的にOpenSSHが採用されているからである。

Option Config Param name default descriptions
-A/-a 認証Agentの転送を許可/禁止
-D Debug logを引数で指定したファイルに書き出す(-v/-vv/-vvv出力)
-e EscapeChar ~ 文字/^文字 指定文字/制御文字をエスケープ文字にする
none: エスケープ文字を禁止する。(Binary Dataに対して透過になる)
-F ~/.ssh/config 設定ファイルを指定する。 システムdefaultは無視される
-f sshの認証後、BackGroundに移行する
-J 引数で指定されたマシンを踏み台にして対象ホストに接続する
対象ホストの名前解決ができなければならない
-L LocalForward Local forward
-l User login名
-N リモートコマンドを実行しない (-Mと併せて使う)
-n stdinを/dev/nullに切り替える。Passphraseなどを入力する必要がある場合 -f を使う
-O -Mで作ったMasterへの制御コマンドを送る。 check: Masterがあるかのチェック
forward: port forwardを要求 / cancel: port forwardをキャンセル
exit: Master Processを終了する / stop: これ以上の分岐を禁止する
-o 設定ファイルと同じ形式でのオプション指定
-M ControlMaster no 単一のネットワーク接続において、複数セッションを共有するか
-Q 問い合わせ。cipher(対象暗号の種類)/cipher-auth(認証付き暗号化をサポートする対象暗号の種類)
mac(メッセージ認証コードの種類)/kex(鍵交換アルゴリズム)/key-cert(証明書の鍵の形式)
-q quiet mode
-R RemoteForward リモーロフォワード
-S ControlPath Master modeにおける制御用Socketファイルの指定
-T/-t RequestTTY セッションに対してTTYを要求するか? no:要求しない/yes:要求する(-t)/forcce:強制的に割り当て(-tt)
-X/-x ForwardX11 no X11接続を転送するか yes:許可/no:禁止
-y logをsysぉg経由で飛ばす。defaultではstderrに出力される
BatchMode no Password/Passphrase入力を求めるか?
CheckHostIP yes knwnhostsファイルのエントリーとの比較を行うか?
ConnectionAttmpts 1 接続試行回数
ConnectTimeout TCP Connectionが成立するまでのTimeout時間の設定
ControlPath Master modeにおける制御用Socketファイルの指定
ControlPersist no: MasterはForegroundのまま、最初のClientが終了した直後に終了
yes / 0 : MasterはBackgroundに移行し、永続的に保持される
数値(秒) / 時間形式 : idleな時間が指定値を越えると接続が終了
OpenSSH 5.6以降でのみ利用可能
ForwardAgent no 認証エージェントへの接続を転送するか
IdentityFile 利用する秘密鍵
force: 常に要求 /auto: loginセッションの時だけ要求する

ControlMaster

  • Masterになる場合、 -M もしくは -o ControlMaster=yes を指定し、 ControlPath=[SocketFilename] を指定する。
  • Masterの接続を流用する場合、-o ControlMaster=no を指定し、 ControlPath=[SocketFilename] を指定する。
    • ControlPathに指定されたSocket Fileがない場合には、通常の接続が行われる
  • -o ControlMaster=autoを指定すると、「Master接続が利用できる場合にはそれを利用、利用できない場合には自動的に新しい接続を作成」する
  • ControlPathの引数にはEscape Sequenceが利用できる
    • %L : Localのホスト名の最初の部分
    • %l : localのホスト名(hostnameコマンドの返り値)
    • %h : remoteのホスト名
    • %n : コマンドラインで指定された(remote)ホスト名
    • %p : remoteのport番号
    • %r : remoteのログイン名
    • %u : sshを実行したユーザーのログイン名
    • %i : sshを実行したユーザーのUID
    • %C : %l%h%p%r

ControlMasterに関するCommand line

  • ssh -M 127.0.0.1
    • Masterとして動作し、RemoteのTTYを掴む。
    • 制御用socketは(FreeBSDの場合)/tmpに置かれる
    • 制御用socketのファイル名を取得する方法がない
  • ssh -M -S [SocketFileName] 127.0.0.1
    • Masterとして動作し、RemoteのTTYを掴む。
    • 制御用socketは-Sの引数に記載された[SocketFileName]になる
  • ssh -N -f -M -S [SocketFileName] 127.0.0.1
    • Masterとして動作し、Socketを作成した後sshはBackgroundに
    • 制御用socketは-Sの引数に記載された[SocketFileName]になる
  • ssh -N -f -O exit -S [SocketFileName] 127.0.0.1
    • [SocketFileName]]'に紐づいたssh接続が終了する * ssh -N -f -M -S [SocketFileName] 127.0.0.1を2回起動する * ControlMaster=auto'' 相当の挙動をする
tweet/2019/0925_01.txt · 最終更新: 2019/10/15 15:01 by seirios