やりたいこと
- ローカル
- 踏み台サーバ(Bastion)
- アクセスしたいサーバ
上記の二段階SSHをconfigファイルを用いてコマンド1つでアクセスできるようにしたい。
最もシンプルなSSH接続の場合
- ローカルマシン
- アクセスしたいサーバ
下記の何れかで目的のサーバにアクセスできる
$ ssh ユーザー名@IPアドレス
or
$ ssh ユーザー名@ホスト名
or
$ ssh ユーザー名@ドメイン名
2段階SSHの場合はどうするか
- ローカル
- 踏み台サーバ(Bastion)
- アクセスしたいサーバ
下記のように長いコマンドで通過することが可能
$ ssh -o ProxyCommand='ssh -W %h:%p -i <BasthtionPublicKeyPath> <BastionUserName>@<BastionPublicIP>' -i <ServerPublicKeyPath> <ServerName>@<ServerPrivateIP>
長いいぃ。このコマンド毎回書くのが大変( ˆˆ; )
configファイルを使うと、シンプルなコマンドで2段階SSHできることが判明
こんな感じで
$ ssh <アクセスしたいサーバ名>
おぉぉぉぉ!すごい!!!!!
でも
そもそもconfigファイルってなに?どうやって作成するのか
configファイルってどうやって読み込むのか
configファイルとは
通常、sshコマンドでツールごとの設定ファイルを読み込む場合は-Fのオプションを用いる
でもsshコマンドの仕様で-Fのオプションが無くても、ファイルのパスを指定しなくても設定ファイルを読み込む方法が1つだけある。
それが、configファイル。
configファイルの基本ルール
- ファイル名が「config」であること
- ssh直下にconfigファイルを配置すること
- sshの仕様である、ssh直下に配置されている「config」というファイルのみ、オプションの指定がなくても読み込むという便利機能を利用する。
configファイルをssh直下に作成する
ターミナルから作成・編集する場合
$ vim ~/.ssh/config
Finderから作成・編集する場合
- 隠しファイルを「⌘ + shift + .」で表示
- sshというフォルダ内にconfigファイルを作成
configファイルの中身を書く
基本構成
# 踏み台サーバー(Bastion)
Host bastion-A
HostName 123.12.1.1
User user-A
IdentityFile ~/.ssh/keyFile #Keyが置いてあるローカルのパスを入力
# アクセスしたいサーバ
Host target-server
HostName 12.11.1.1
User user-target
IdentityFile ~/.ssh/keyFile #Keyが置いてあるローカルのパスを入力
ProxyCommand ssh -W %h:%p bastion-A #経由してくる踏み台サーバを指定する
ワイルドカード指定
また、アスタリスク(*)で定義することで、ワイルドカード指定をすることができる
例えば、Bastionも目的のサーバも全て同じkeyFileを指定する場合下記のようにすると便利
※設定の優位は セクションでの定義 > *での共通定義
Host *
IdentityFile ~/.ssh/keyFile
他にも、あまり理解できない設定はいくつかあった
StrictHostKeyChecking no #強固なセキュリティーを不要とする設定?
UserKnownHostsFile /dev/null #アクセスしたログを残さないようにする設定?
秘密鍵のPermissionに関して
EC2にSSH接続しようとしたら、Permissionの変更を求められるケースも経験したのでメモ_φ(・_・
参考サイト:https://yuichon.com/2013/04/privatekey-permissions/
結論:勉強はかなり必要