OpenSSH
鍵の作成と登録
ssh-keygen
で公開鍵および秘密鍵を作成する。-t
で暗号アルゴリズム、-f
で鍵ファイルの保存先を指定する。以下はED25519で作成する例。Ed25519の鍵のビット長は256bit固定。
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
鍵のビット長は-b
で指定する。以下はECDSAの521bitで作成する例。
ssh-keygen -t ecdsa -b 521 -f ~/.ssh/id_ecdsa
鍵のコメントにユーザー名とホスト名を含めたくない場合は-C
で空白を渡す。
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C ""
作成した公開鍵*.pub
はSCPやSFTPなど何らかの方法でサーバーの~/.ssh/authorized_keys
に追加する。
基本
以下のコマンドで接続。-i
はIdentity file(秘密鍵)の指定。
ssh ユーザー名@ホスト名 -i ~/.ssh/秘密鍵
これを~/.ssh/config
を使用して行う場合は以下の内容を追加する。Host
から次のHost
の直前までの記述が一つの接続先に対する設定となる。
インデントは不要だが可読性を上げるためにつけることを推奨。
Host 接続名
HostName ホスト名
User ユーザー名
IdentityFile ~/.ssh/id_rsa
以下のコマンドで接続。
ssh 接続名
プロパティ
全てのプロパティはmanを参照。
プロパティ | 説明 | 備考 |
---|---|---|
Host | 接続先のHost名のエイリアス | Host以降の宣言を指定されたパターンのいずれかに一致するホストのみに限定する。 |
HostName | 接続先のIPアドレス or ホスト名 | |
Port | 接続先のポート番号 | 省略すると22 となる。 |
User | ログインユーザ名 | |
IdentityFile | 秘密鍵のパス | |
IdentitiesOnly | 指定された秘密鍵のみを使用するかどうか |
yes を推奨。 |
パターン
ゼロ個以上の文字に一致する*
と1文字に一致する?
を使用できる。
Host *.co.uk
Host 192.168.0.?
Match
Match
で色々な条件が満たされる場合にのみプロパティを適用できる。使用できる条件のキーワードはmanを参照。
Match host *.example.com
# HostNameが*.exmaple.comの接続先に適用するプロパティ
Match originalhost target*
# Hostがtarget*の接続先に適用するプロパティ
Match
を使った宣言は各接続先の宣言の後に記述すべきだが、Match final
とすると全てのHost
が解析された後に解析される。
多段SSH
ProxyCommand
を紹介している記事が散見されるが古い情報なのでProxyJump
でよい。
Host jump1
HostName jump1.example.com
User your_username
Host jump2
HostName jump2.example.com
User username
ProxyJump jump1
Host targethost
HostName target.example.com
User username
ProxyJump jump2
Includeによるファイル分割
OpenSSH 7.3から使用可。
OpenBSD manual pagesのssh_configの説明は以下の通り。
Include
Include the specified configuration file(s). Multiple pathnames may be specified and each pathname may contain glob(7) wildcards and, for user configurations, shell-like ‘~’ references to user home directories. Wildcards will be expanded and processed in lexical order. Files without absolute paths are assumed to be in ~/.ssh if included in a user configuration file or /etc/ssh if included from the system configuration file. Include directive may appear inside a Match or Host block to perform conditional inclusion.
よってIncludeは先頭に書く。
~/.ssh/config.d/
に個別の設定ファイルを置くことにする場合は、~/.ssh/config
を以下のように更新する。
Include ~/.ssh/config.d/*
VS Code
以下の拡張機能を導入する。
Port Forwarding
以下は接続先から見たexample.com:8000
を接続元のlocalhost:8001
にバインドする例。
ssh 接続先 -L 8001:example.com:8000 -fN
-
-f
でバックグラウンドで実行する -
-N
でリモートでコマンドを実行しない(シェルを起動しない)
動的なアプリケーションレベルのPort Forwarding
WIP
X11 Forwarding
WIP