AA研514ばんの日誌

2022-02-23

winのopensshで鍵使い回す

たまにしかやらないんで忘れるから俺メモ。
だいぶ前からputty使わなくなって
winのopensshから繋ぐってやってるけど
新しい環境作ったりしたときの作業忘れがちなんで
(環境変数HOMEセット済で。)
mkdir %HOME%\.ssh
mklink /j %USERPROFILE%\.ssh %HOME%\.ssh
(自分のプロファイル直下)に「.ssh」を掘っても別に構わない。
単に自分は、d:\home\(ユーザフォルダ)のように
別ドライブに掘って、そこにdocumentsとかのデータ置き場作ってあるんで
「.ssh」は作らなかったら、ssh.exeで最初に繋げたときにプロファイルフォルダ下に勝手に掘られる
(known_hostsとかを残すから)
普通は、生成した鍵を「.ssh」内に入れておけばいいが
(クライアント側が秘密鍵、サーバ側が公開鍵(.pubの方))
「.ssh\config」というファイルを置いておくと
別のフォルダに読み込む鍵とか個別の設定記述を置いておける。
「.ssh\config」
include */config
include */*/config
2行目は別にいらないけど、下例のような2下層以降に分けて切り分けたいとかなら。
.ssh
|- server1/
||- user1/config(と公開鍵)
||- user2/config(と公開鍵)
|- server2/
 |- user1/config(と公開鍵)
 |- user3/config(と公開鍵)
include文を使えば、こんな構成とかできるということ
個々のconfigには
Host hogehoge(任意の名前。ssh.exeの引数でサーバ名の代わりに指定する)
Hostname abc.com(接続ホスト名)
User xyz(接続ユーザ名)
Port 22(繋げるsshサーバのポート)
IdentityFile (id_rsaのファイルをフルパス付きで)
こういう感じで書いておけばよい。
要するに、sshの引数で指定する内容をここに書くということ。
configの読み込みがちゃんとできていれば
「ssh hogehoge」
だけで接続しにいく。
(上例だと、ユーザ@ホスト:port:xyz@abc.com:22)
IdentityFileの記述は、フルパスだが
「~/.ssh/id_rsa」のような記述も可能。
この場合の「~」は、プロファイルフォルダ基準だったはず。(%HOME%かもしれない)
鍵は、以前に作ったやつをそのまま使い回すんで、作る必要もないが
「ssh-keygen.exe」で、問い合わせ式で入れていけば、opensshタイプの鍵ペアが作れる。
なお、「.ssh」や「id_rsa」などは、アクセス権が自分以外にもあると
ssh.exeなどが警告出して使ってくれないことがあるんで
エクスプローラの右クリックのプロパティとかで
セキュリティから余計なアクセス権は全部削除しておく
「chmod 600」的なやつ
コマンドラインから「icacls」とかでもできるんだろうけど
あれいまいちわかりにくいんで、プロパティからの権限操作の方が手っ取り早い。
(まとめ)
.sshフォルダをプロファイルフォルダ以下に掘る
(もしくは、同内容のフォルダへのジャンクションを張る)
.ssh以下に、「id_rsa」を置く
接続相手ごとに切り分けたいなら、別途下層にフォルダごとで分けて置く
configファイルを用意する
フォルダ単位で設定を置くなら、それぞれにconfigを置いて
それを.ssh直下のconfigで include させると分かりやすい
configに最低限必要な設定記述(他もあれば書き足す)
host
hostname
user
port
IdentityFile
.ssh以下のフォルダ・ファイルのアクセス権を所有者のみに変更しておく
ssh.exeで繋げる際には、configのhostで書いた名前で繋げるだけ。
正しくできていれば、接続時にid_rsaでのパスフレーズ認証を進める。
これ1つちゃんと作っておけば、別のPCとかにWindowsインストールした後
.ssh以下をまんまフォルダコピーして持ってくるだけで接続設定引き継げる
鍵自体は、ssh-keygen.exe で作ればよい(公開鍵はサーバ側のauthorized_keysに置くのとかは一緒)