🗂

多段sshを行うときに、ローカルの秘密鍵を参照し続ける

2021/05/03に公開

目的: sshを使い複数のサーバーにログインする

要請

  • 複数のサーバーを経由した場合でも楽に目的のサーバーにログインしたい
  • ユーザー名,ホスト名の入力を省略したい
  • 鍵認証を利用する場合目的のサーバーによって鍵を自動で使い分けたい
  • 多段sshで鍵を利用するときに、常に自分のローカルマシンの秘密鍵を参照したい ((A→B→C)でログインするときにCはBではなくAの鍵を参照するようにしたい)
  • 長時間サーバーにログインしていても通信が切れないようにしたい
  • X11を利用したい
  • 2つ目の接続は1つ目の接続を利用し認証をスキップしたい

※公開鍵認証とはパスワード認証ではない認証方式である(安全性が高い)。

公開鍵の概念
公開鍵の利用

ssh設定ファイルの構造

ファイル名 役割
~/.ssh/config ssh設定ファイル
~/.ssh/id_rsa 秘密鍵(鍵の役割)
~/.ssh/id_rsa.pub 公開鍵(鍵穴の役割)
~/.ssh/authorized_keys 公開鍵の鍵束(実際、公開鍵の中身がテキストで羅列してある)
~/.ssh/known_hosts 過去に利用したサーバーのリスト

鍵穴(公開鍵)をサーバ設置して、手元の鍵(秘密鍵)でログインする

解決策

~/.ssh/configの設定

設定

各マシーン

ローカルPC = macbook
サーバーA : ユーザー名=usernama1 ドメイン=aaa.ac.jp
サーバーB : ユーザー名=username2 ドメイン=bbb.ac.jp

つまりサーバーAにログインするには

shell
ssh username1@aaa.ac.jp

公開鍵と秘密鍵(macbook 上で生成)

秘密鍵:macbook_rsa
公開鍵:macbook_rsa.pub

やりたいこと

ローカルPC → サーバーA
ローカルPC → サーバーA → サーバーB

config
Host A
HostName aaa.ac.jp
User username1
IdentityFile ~/.ssh/macbook_rsa
ForwardAgent yes
ForwardX11 yes
ServerAliveInterval 300
ForwardX11Timeout 596h
ControlMaster auto
ControlPath ~/.ssh/mux-%r@%h:%p
ControlPersist 30m

Host B
HostName bbb.ac.jp
User username2
ProxyCommand ssh A nc %h %p
IdentityFile ~/.ssh/macbook_rsa
ForwardAgent yes
ForwardX11 yes
ServerAliveInterval 300
ForwardX11Timeout 596h
ControlMaster auto
ControlPath ~/.ssh/mux-%r@%h:%p
ControlPersist 30m

※Hostは自由に名前をつけて下さい

使い方

まず鍵をssh-agentに鍵を登録する

shell
sudo ssh-add ~/.ssh/macbook_rsa

Aにログイン

shell
ssh A

Aを経由してBにログイン

shell
ssh B

解説

変数 意味
Host サーバーのニックネーム
IdentityFile 使用する秘密鍵を指定
ForwardAgent yes ssh-agentを利用する
ForwardX11 yes X11の転送を行う
ProxyCommand ssh A nc %h %p Bに行くときはまずAを経由する
ServerAliveInterval 300 300秒おきにシグナルを送り通信が自動で切断されるのを防ぐ
ForwardX11Timeout 596h X11のタイムアウト時間を596時間にして、自動でX11の転送が途切れるのを防ぐ
ControlMaster auto
ControlPath ~/.ssh/mux-%r@%h:%p
ControlPersist 30m
同じサーバーに2つ目のsshを行った時に、1つ目のsshを利用して接続時間を高速にする(認証をスキップ)。
注:ControlPersist 30mを使い30mでタイムアウトを設定しておかないと、sshをログアウトした後も裏で通信が続いている状態になる
ssh-agent
ssh-agentの注意点 4.4.4. 認証エージェントを使う際の注意を参照
ControlMaster

Discussion