- 環境
- 接続元
- CentOS Linux release 7.6.1810 (Core)
- OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
- 踏み台ホスト : Amazon Linux release 2 (Karoo)
- 置き場ホスト : Red Hat Enterprise Linux Server release 5.11 (Tikanga)
- 接続元
やりたいこと : 踏み台の向こうにある置き場ホストに一発でファイルを転送したい
ファイルを接続元から踏み台において、踏み台から置き場において・・・というのが面倒くさい。
SCPでProxyCommand
を使って多段接続すればいい
フォーマット
# 例)特定ディレクトリにある拡張子jarのファイルを全部転送する
# -r : ディレクトリ内を再帰的にコピーします。
# -o : 設定ファイル(ssh_config)で使われている形式のオプションを ssh に渡す
# -W : %hと%pを本来の接続先とそのポートへ置換する
$ scp -i {置き場鍵} -r -o ProxyCommand='ssh -i {踏み台鍵} -W %h:%p {踏み台ユーザ}@{踏み台アドレス}' {自分ディレクトリパス}/*.jar {置き場ユーザ}@{置き場アドレス}:{置き場ディレクトリパス}
やってみた
SSHでも同じようにProxyCommand
を使って多段接続すれば、踏み台の向こうにあるホストへ一発でログインできる。
# SCPでファイルを転送する
$ scp -i ~/.ssh/okiba.pem -r -o ProxyCommand='ssh -i ~/.ssh/fumidai.pem ponsuke@12.134.567.890 -W %h:%p' /home/ponsuke/HOGE.war ponsuke@10.0.2.1:/tmp/.
Enter passphrase for key '/home/ponsuke/.ssh/fumidai.pem':
Enter passphrase for key '/home/ponsuke/.ssh/okiba.pem':
HOGE.war 100% 38MB 44.2MB/s 00:00
Killed by signal 1.
# SSH接続しておいたファイルを確認しに行ってみる
$ ssh -i ~/.ssh/okiba.pem -r -o ProxyCommand='ssh -i ~/.ssh/fumidai.pem ponsuke@12.134.567.890 -W %h:%p' ponsuke@10.0.2.1
Enter passphrase for key '/home/ponsuke/.ssh/fumidai.pem':
Enter passphrase for key '/home/ponsuke/.ssh/okiba.pem':
Last login: Thu Apr 2 14:49:44 2020 from 10.0.3.182
# ちゃんと送られていた
$ ls /tmp/
HOGE.war
.ssh/configに書いて楽をする方法
「踏み台の向こうにある置き場ホストに一発でファイルを転送」をコマンドで書くと異様に長いし覚えられないので~/.ssh/config
に設定を書くと楽になりました。
# 踏み台
Host fumidai
HostName 12.134.567.890
User ponsuke
IdentityFile ~/.ssh/fumidai.pem
# 置き場
Host okiba
HostName 10.0.2.1
User ponsuke
IdentityFile ~/.ssh/okiba.pem
ProxyCommand ssh fumidai -W %h:%p
上記にのように~/.ssh/config
を書くと簡単に多段階接続してSCPできます。
# configに設定を書いた場合
$ scp -r {自分ディレクトリパス}/*.jar okiba:{置き場ディレクトリパス}
# configに設定を書かない場合
$ scp -i {置き場鍵} -r -o ProxyCommand='ssh -i {踏み台鍵} -W %h:%p {踏み台ユーザ}@{踏み台アドレス}' {自分ディレクトリパス}/*.jar {置き場ユーザ}@{置き場アドレス}:{置き場ディレクトリパス}