

[クライアントA] -- [サーバB] -- [サーバC]  
のようなネットワーク構成があります。クライアントAからサーバCには直接アクセスはできません。  
このような構成の場合、クライアントAからサーバCにscpでファイルを置こうとしたら、  
1\. クライアントAからサーバBにscpでファイルを置く  
2\. クライアントAからサーバBにsshでログイン  
3\. サーバBからサーバCにscpでファイルを置く  
4\. サーバBのファイルを削除  
という手順を行なっています。

非常に面倒なので、クライアントAの操作のみでサーバCに(サーバBを経由して)ファイルを置けないかと思っています。

いい方法をご存知の方は、ご教示いただけると幸いです。


CC BY-SA 4.0
2018-06-10T15:54:57.320
44672
2018-06-11T07:59:57.557
8593
question
scp
多段サーバー構成でscpを使いたい


ぱっと思いつく方法は、2通りあります。

  1. ご提示の2～4の手順をsshコマンドで実行するスクリプトを作成する。 
  2. ProxyCommandを用いて、多段sshを実行してみる

おそらく、やりたいことは2の方が近いと思いますので、実現するための参考サイトを  
ご提示します。

<https://dev.classmethod.jp/beginners/direct-ssh-by-proxycommand/>  
<https://qiita.com/S-T/items/18af2bfcc4e5a72202da>

ただ、サーバー間の設定が適切でないとはまりそうなので、注意して実施してください。


CC BY-SA 4.0
2018-06-10T19:34:28.187
44673
2018-06-10T19:34:28.187
10174
44672
answer


どれか1つをクライアントAの`~/.ssh/config`に追記します。

`ProxyCommand`を用いる場合その1:

[code]

    Host <サーバB>
      User <BのログインID>
    
    Host <サーバC>
      User <CのログインID>
      ProxyCommand ssh <サーバB> nc %h %p
    
[/code]

`ProxyCommand`を用いる場合その2(5.4以降で利用可):

[code]

    Host <サーバB>
      User <BのログインID>
    
    Host <サーバC>
      User <CのログインID>
      ProxyCommand ssh -W %h:%p <サーバB>
    
[/code]

`ProxyJump`を用いる場合(7.3以降で利用可):

[code]

    Host <サーバB>
      User <BのログインID>
    
    Host <サーバC>
      User <CのログインID>
      ProxyJump <サーバB>
    
[/code]

* * *

実行例:

[code]

    scp myfile <サーバC>:./myfile
    
[/code]

参考:  
[OpenSSH/Cookbook/Proxies and Jump Hosts - Wikibooks, open books for an open
world](https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts#Jump_Hosts_
--_Passing_Through_a_Gateway_or_Two)

man では ssh(1), ssh_config(5) が該当するかと思います。


CC BY-SA 4.0
2018-06-11T07:43:07.583
44686
2018-06-11T07:59:57.557
2018-06-11T07:59:57.557
2808
2808
44672
answer