rokkiの備忘録

地道こそ近道

今日まで、その公開鍵には一度も触れたことがない。

初投稿です.タイトルのネタがわかる方は同志です.仲良くしてください!




[閑話休題]





さて,今回は多段SSH鍵認証を活用して,リモートVSCode環境を構築できたので,その備忘録記事となります.

目次は以下です. 

1段ssh

まず1段sshから示します.configは以下のように設定しました.

Host server
HostName example.com
User rokki
IdentityFile ~/.ssh/id_rsa_xxx
# 鍵認証なし
ssh rokki@example.com
# input password
# login!

# 鍵認証あり
ssh server
# login!
手順

1段sshの鍵認証の流れは以下です.ローカル,リモートはそれぞれサーバのクライアント,ホストに対応しています.

  1. ローカルPCで公開鍵,秘密鍵を作成
  2. ローカルの公開鍵をリモートPCにコピー
  3. リモートPCに,コピーした公開鍵を登録
  4. configファイルの作成

次に,コードと共に解説します.

1. ローカルPCで公開鍵,秘密鍵を作成
local:~$ cd ~/.ssh
local:~/.ssh$ ssh-keygen -t rsa -f id_rsa_xxx

homeディレクトリ配下の.sshへ移動し,鍵を作成*1する.fオプションで,作成される鍵のファイル名を指定できる.

local:~/.ssh$ ls
id_rsa_xxx.pub id_rsa_xx

作成された公開鍵,秘密鍵を確認しておく.
 

2. ローカルの公開鍵をリモートPCにコピー
local:~/.ssh$ scp id_rsa_xxx.pub rokki@example.com:~/.ssh/
# input password

scpコマンドを用いて,作成した鍵をリモートPCの.ssh配下にコピーする.

3. リモートPCに,コピーした公開鍵を登録

catコマンド*2を用いる.

rokki@example.com:~/.ssh$ cat id_rsa_xxx.pub >> authorized_keys

公開鍵の登録が初めてであれば,authorized_keys*3は新規作成される.以前にも登録したことがあれば,追記となる.

必要に応じて*4,authorized_keysの権限を変更する.

# 変更しなくてOK
rokki@example.com:~/.ssh/ $ ls -l
-rw------- 1 rokki rokki xxxx  411 18:00 authorized_keys
# 変更すべき
rokki@example.com:~/.ssh/ $ ls -l
-rw-rw-r-- 1 rokki rokki xxxx  411 18:00 authorized_keys
rokki@example.com:~/.ssh/ $ chmod 600 authorized_keys
rokki@example.com:~/.ssh/ $ ls -l
-rw------- 1 rokki rokki xxxx  411 18:00 authorized_keys
4. configファイルの作成

 再びローカルPCに戻り,configファイルを作成する.

Host server
HostName example.com
User rokki
IdentityFile ~/.ssh/id_rsa_xxx
  • Host:任意のホスト名を登録できる.sshでログインする際にこのホスト名を用いる.
  • HostName:sshサーバのIPアドレス(xxx.xxx.xxx.xxx)または,ホスト名を指定する.
  • User:sshサーバに登録されているユーザ名を指定する.
  • IdentityFile:作成した秘密鍵のパスを指定する.デフォルトでは~/.ssh/id_rsa

なお,ホスト名は以下のように確認できる.

rokki@example.com:~ $ hostname 
example.com

以下のコマンドのみで,リモートPCにログインできれば終了

ssh server

多段ssh

localの環境からserverA,serverBを踏み台にして,serverCへ接続したい場合を想定しています.
結論から示すと,configは以下のように設定しました.

Host serverC
  HostName ccc.ccc.ccc.ccc
  User rokki
  IdentityFile ~/.ssh/id_rsa_xxx

Host serverB
  HostName bbb.bbb.bbb.bbb
  User rokki
  IdentityFile ~/.ssh/id_rsa_xxx
  ProxyCommand ssh -W %h:%p serverC

Host serverA
  HostName aaa.aaa.aaa.aaa
  User rokki
  IdentityFile ~/.ssh/id_rsa_xxx
  ProxyCommand ssh -W %h:%p serverB

この設定で,楽チンログイン!

# 鍵認証なし
ssh rokki@aaa.aaa.aaa.aaa
# input password
# login serverA!
ssh rokki@bbb.bbb.bbb.bbb
# input password
# login serverB!
ssh rokki@ccc.ccc.ccc.ccc
# input password
# login serverC!

# 鍵認証あり
ssh serverA
# login serverC!
手順
  1. localからserverAへの接続について,1段sshと同様に鍵認証を行う.
  2. localで作成した公開鍵*5を,serverAからserverBへコピーし,鍵を登録する.
  3. localで作成した公開鍵を,serverBからserverCへコピーし,鍵を登録する.
  4. configファイルを作成

VSCodeの設定

  • VSCode拡張機能(Remote Development,Remote - SSH)をインストールする.
  • Ctrl+Shift+P,"Remote-ssh Connect to Host","serverA"を選択すると接続完了!

まとめ

1段ssh,多段sshにおける鍵認証について手順をまとめました.やはりブログでアウトプットするのは良い復習になるなと実感しました.

PS.ssh-agentを使えばもっと楽できるそうなので,今後の課題とします.ssh完全理解の道は遠いな~.

*1:pathphraseは空文字を入力

*2:【Linuxコマンド集】3分でわかるcat コマンドの使い方

*3:typoに注意

*4:所有者のみ読み書きできるようにするため

*5:多段sshではlocalの秘密鍵を使用するため(ハマリポイント)