web-dev-qa-db-ja.com

SFTP over double server hop

ローカルマシンからはアクセスできない方法よりも、SFTPサーバー上のファイルにアクセスできるようにする方法を考えています。現在、リモートサーバー(最終的なSFTPサーバーが受け入れる特定のIPブロック内にあります)にSSHで接続し、そこから宛先サーバーにSFTPで接続する必要があります。そこから、関心のあるファイルをgetし、それによってそれらを仲介サーバーにドロップします。そこから、Samba共有を介して、または直接scpを使用してファイルを取得できます。また、ファイルを仲介者にドロップし、SSHで転送し、SFTPで宛先に移動し、putを適切なフォルダーに入れます。

私の目標はこれを短くすることです。残念ながら、私のマシンはWindows(KiTTyやCygwinを使用)であり、仲介サーバー(または宛先サーバー)を変更することはできません。それが機能し、無料である限り、私はコマンドラインまたはGUIプログラムを使用するつもりです。

何か案は?

15
josh.trow

本質的に、GUIまたは他の便利さなしで:

ssh -o ProxyCommand='ssh myfirsthop nc -w 10 %h %p' mydestination

設定ファイルを編集することで、これをデフォルトにすることができます。デフォルトでは〜/ .ssh/config

Host mydestination, mydest2, mydest3
ProxyCommand ssh myfirsthop nc -w 10 %h %p

これにより、次のことが可能になります

ssh mydestination
scp mydest2:file.txt ./
scp file.txt mydest3:/tmp/

もちろん、そのような魔法を使えば簡単にできます

mkdir -pv /tmp/mydest3tmp          # create mountpoint
sshfs mydest3:/tmp /tmp/dest3tmp/  # mount :)

Windowsでは、(IIRCだと思いますが)PLINK(PuTTYスイートから)に付属しているWinSCPを使用します。 ssh configファイルのデフォルトの場所は異なると思いますが(グーグルで検索する必要があります)、ほぼ同じように機能すると確信しています。

これが機能するために必要なのは、ミドルサーバー(ファーストホップ)の「netcat(nc)」だけであることに注意してください。これは、linux/UNIX [1]のユビキタスツールです。静的にリンクされたバージョンを構築するのは非常に簡単です。最初にそこにコピーできれば、機能するはずです。

[1]いくつかのフレーバーがあるため、-wオプションのドロップ/スペルを変える必要がある場合があることに注意してください

24
sehe

@seheと@Jakubなしではこれを見つけることができなかったので、これを受け入れられた回答として設定するつもりはありませんが、すべてを簡素化するためにここに見つけたものがあります...

WinSCPには、組み込みのSSHトンネルを使用する機能があります。この機能がいつ到着したかはわかりませんが、どういうわけか以前は気づきませんでした。

WinSCP Tunnel settings

9
josh.trow

私の提案の1つは、(Windowsボックスから)PuTTYを使用してsocksプロキシを作成し、それを介してSFTPクライアントをプロキシすることです(たとえば、Filezilla sftp)。

その方法で特別なことをする必要はありません。PuTTYsocks5プロキシをオンにし、filezillaをオンにして、ファイルを宛先サーバーにsftpします。

(you ==socks5 proxy==> middle server) ==> destination server
2
Jakub