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