LoginSignup
13
13

More than 5 years have passed since last update.

多段SSHでscp,rsync,gitを使う

Last updated at Posted at 2016-06-22

多段SSHでscp,rsync,gitを使う

ファイアーウォールの中のSSHサーバに接続したい場合、ゲートウェイとなるSSHサーバを経由して接続することがよくあります。

その場合、ProxyCommandを使った多段SSHスクリプトを用意しておくといろいろなコマンドから利用できるのでとても便利です。

以下の例は、~/bin (ホーム直下のbinディレクトリ) にPATHが通っている前提です。

多段SSHスクリプト

小さなシェルスクリプトを書きます。

ゲートウェイとなるSSHの情報を設定します。以下の例はusername: username, host: gatewayの例です。

ProxyCommand ssh の後にはsshコマンドのオプションが使えますので、ポート番号が違う場合などは -p で指定できます。

$ vim ~/bin/hogessh

以下の内容を作成

#!/bin/sh
exec ssh -o "ProxyCommand ssh username@gateway -W %h:%p 2> /dev/null" $@

実行権限をつけます

$ chmod 755 ~/bin/hogessh

SSH接続

内側のネットワークで動作しているサーバへSSH接続します

$ hogessh user@192.168.0.12

ゲートウェイとなるSSHサーバで名前解決できれば、クライアント側で名前解決できなくても独自の名前のホストに接続することができます。/etc/hostsにかくもよし、dnsmasqをつかうもよし。クライアント側の ~/.ssh/config をすっきりさせることができるかもしません。

$ hogessh user@special-server

agent forwarding(-A)を使うと内部のサーバから手元のマシンの自分のSSHキーを使って直接GitHubにPushできたりするので便利です

$ hogessh -A user@192.168.0.12
$ cd very_nice_project
$ vim README.md
$ git commit -a "message" --author "user <email@address>"
$ git push origin master

scpを使う

-S に多段SSHスクリプトを指定します

$ scp -S ~/bin/hogessh user@192.168.0.12:/home/user/thefile.txt .

rsyncを使う

環境変数 RSYNC_RSH に多段SSHスクリプトを指定します

$ RSYNC_RSH=~/bin/hogessh rsync -av user@192.168.0.12:/home/user .

または

$ export RSYNC_RSH=~/bin/hogessh
$ rsync -av user@192.168.0.12:/home/user .

gitを使う

環境変数 GIT_SSH に多段SSHスクリプトを指定します

$ GIT_SSH=~/bin/hogessh git clone user@192.168.0.12:/home/user/very_nice_project .

または

$ export GIT_SSH=~/bin/hogessh
$ git clone user@192.168.0.12:/home/user/very_nice_project .
13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13