こんにちは、「マサとフミ」のフミです。
先日、こんなことがありました。

targetサーバにSSHできないみたいなのですが。
一度ゲートウェイサーバにSSHして、ゲードウェイサーバからtargetサーバにSSHしないとダメだよ。


えー、そうなんですか。ありがとうございます!

(うーん、ゲートウェイサーバに用はないのに毎回経由するのは面倒だなぁ。)
ログを見たりファイルを編集したり、日常的にログインするサーバには直接アクセスできないと不便ですよね。とはいえ、セキュリティ上の理由など、ゲートウェイサーバ(踏み台サーバ)を経由しないとアクセス出来ないといったことはよくあることです。そこで今回は、1回の操作で目的のサーバにログインできる多段SSHの方法を説明します。
踏み台サーバ経由SSH接続を自動化する方法

非常に簡単です。ステップを踏んで説明していきます。
ステップは次の通り
- STEP1:踏み台サーバ経由SSH接続とは
- STEP2:ProxyCommandを使って自動化しよう
- STEP3:.ssh/configに設定して楽しよう
STEP1:踏み台サーバ経由SSH接続とは
今回やりたいSSH接続は、通常、操作PCからこのように2回SSHを使用してログインしているtargetサーバに、1回のSSHでログインすることです。

今回ご紹介する方法も厳密には、2回SSHが実行されます。ですが、1つのコマンドで実行できるようにすることで、操作PCから一気にtarget_serverへのログインが可能となります。
具体的な方法についてはSTEP2以降で説明します。
STEP2:ProxyCommandを使って自動化しよう
ProxyCommandとは、sshコマンドのオプションに指定できるもので、コマンド実行前にProxy的に指定した内容を実行してくれる機能です。
sshはPxoryCommandが指定されると、まずProxyCommandで指定されたコマンドを実行して、その後、元の指定コマンドを実行します。
つまり、このProxyCommandでgateway_serverにSSH接続し、その後、target_serverにSSH接続するような下記コマンドを実行することで多段SSHを実現します。
$ ssh -o ProxyCommand='ssh -W %h:%p userA@gateway_server' userB@target_server
ProxyCommandはsshの -oオプションを使って指定します。
ProxyCommand内のsshコマンドに渡している-W
というオプションはホスト名とポート番号を指定するオプションです。
ProxyCommandに指定した文字列の%h
と%p
は接続先のホスト名(target_server)に置換されます。
上記コマンドを実行することで1回のSSHコマンドでtarget_serverにログイン出来るようになったわけですが、毎回このコマンドを入力するのは非常に面倒・・・。
そんなときは.ssh/configに設定しておくとコマンド入力の手間が省けるのでオススメです。
.ssh/configの設定方法をSTEP3でご紹介します。
STEP3:.ssh/configを設定して楽をしよう
sshコマンドに色々な引数を渡して、1コマンドで実行することは可能ですが、毎回長いコマンドを入力するのは手間ですよね。
こんな時に役に立つのが、.ssh/config です。今回のProxyCommandもこのconfigファイルに登録することが可能です。
ファイルには以下の12行目のように設定します。
Host gateway_server #ゲートウェイサーバの定義名。 HostName gateway #ゲートウェイサーバのホスト名もしくはIPアドレス User userA #ユーザ名 Port xxxxx #ポート番号 IdentityFIle xxxxx #ゲートウェイサーバのアクセスに使う鍵のパス Host target_server #ターゲットサーバの定義名 HostName target_server #ターゲットサーバのホスト名もしくはIPアドレス User userB #ユーザ名 Port xxxxx #Port番号 IdentityFIle xxxxx #ターゲットサーバのアクセスに使う鍵のパス ProxyCommand ssh -W %h:%p server_gw #オプションで指定するコマンド
上記のようにconfigファイルを設定しておくと、STEP2でご紹介した長かったコマンドが以下のように短くなり、これだけで多段SSHして対象サーバにログインできるようになります。
ssh server_target
普段の業務で自動化できるところはないか考えよう
今回は多段SSHをできるようにすることで、ちょっとした手間を削減する方法をご紹介しました。
日々、繰り返しやる作業ほどなるべく手間を省き、ミスを減らし、効率化できるようこういった自動化は大切だと思っています。
みなさんも普段の業務で自動化できるところはないか、考えてみるのもいいかもしれません。