ノウハウ

踏み台サーバ経由SCPで楽をしよう!

こんにちは、「マサとフミ」のフミです。

先日、こんなことがありました。

フミ
フミ

targetサーバにSCPできないみたいなのですが。

一度ゲートウェイサーバにSCPして、ゲードウェイサーバからtargetサーバにSCPしないとダメだよ。

マサ
マサ
フミ
フミ

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

フミ
フミ

(うーん、ゲートウェイサーバに用はないのに毎回経由するのは面倒だなぁ。)

ログファイルを転送したり、デプロイするモジュールを転送したり、日常的に使用するサーバには直接SCPできないと不便ですよね。とはいえ、セキュリティ上の理由など、ゲートウェイサーバ(踏み台サーバ)を経由しないとアクセス出来ないといったことはよくあることです。そこで今回は、1回の操作で目的のサーバにSCPできる多段SCPの方法を説明します。

踏み台サーバ経由SCP接続を自動化する方法

非常に簡単です。ステップを踏んで説明していきます。

ステップは次の通り

  • STEP1:踏み台サーバ経由SCPとは
  • STEP2:ProxyCommandを使って自動化しよう
  • STEP3:.ssh/configに設定して楽しよう

STEP1:踏み台サーバ経由SCPとは

今回やりたいSCPは、通常、操作PCからこのように2回SCPを使用してtargetサーバにファイル等を転送しているところを、1回でSCPすることです。

今回ご紹介する方法は厳密には、SSHでgateway_serverにログイン後、SCPが実行されます。ですが、1つのコマンドで実行できるようにすることで、操作PCから一気にtarget_serverへのSCPが可能となります。

具体的な方法についてはSTEP2以降で説明します。

STEP2:ProxyCommandを使って自動化しよう

ProxyCommandとは、scpコマンドのオプションに指定できるもので、コマンド実行前にProxy的に指定した内容を実行してくれる機能です。

scpはPxoryCommandが指定されると、まずProxyCommandで指定されたコマンドを実行して、その後、元の指定コマンドを実行します。

つまり、このProxyCommandでgateway_serverにSSHでログインし、その後、target_serverにscpするような下記コマンドを実行することで多段SCPを実現します。

$ scp -o ProxyCommand='ssh -W %h:%p userA@gateway_server' /dir/file(転送元ファイル) userB@target_server:/dir(転送先パス)

ProxyCommandはsshの -oオプションを使って指定します。
ProxyCommand内のsshコマンドに渡している-Wというオプションはホスト名とポート番号を指定するオプションです。
ProxyCommandに指定した文字列の%h%pは接続先のホスト名(target_server)に置換されます。

上記コマンドを実行することで1回のSCPコマンドでtarget_serverにSCP出来るようになったわけですが、毎回このコマンドを入力するのは非常に面倒・・・。
そんなときは.ssh/configに設定しておくとコマンド入力の手間が省けるのでオススメです。

.ssh/configの設定方法をSTEP3でご紹介します。

STEP3:.ssh/configを設定して楽をしよう

SCPや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して対象サーバにログインできるようになります。

scp  /dir/file(転送元ファイル) server_target:/dir(転送先パス)

普段の業務で自動化できるところはないか考えよう


今回は多段SCPをできるようにすることで、ちょっとした手間を削減する方法をご紹介しました。

日々、繰り返しやる作業ほどなるべく手間を省き、ミスを減らし、効率化できるようこういった自動化は大切だと思っています。

みなさんも普段の業務で自動化できるところはないか、考えてみるのもいいかもしれません。

-ノウハウ

© 2021 プロITエンジニア道