別のホストを介してのみSSH接続できるホストからファイルをダウンロードするにはどうすればよいですか?


30

オフィスのコンピューターからラップトップにファイルをダウンロードしたい。

オフィスマシンをSSHで組織サーバーに接続してから、サーバーからオフィスマシンにSSH接続できます。

組織サーバーが受け入れる唯一のコマンドは、ssh、ssh1、およびssh2です。

オフィス(リモート)マシンからサーバーを介してラップトップ(ローカル)マシンにファイルをダウンロードするにはどうすればよいですか?


2
リバースSSHトンネルを使用しますか?ここに私の答えを参照し、必要に応じてそれを適応させる:superuser.com/questions/1186905/...
ダレン

1
マルチホップSSH?
mckenzm

回答:


37

前の回答では、ProxyJumpディレクティブ(OpenSSH 7.3で追加)を使用して中間サーバー(通常は要塞ホストと呼ばれる)を介して接続する方法について説明していますが、コマンドライン引数としてのみ説明しています。

将来接続する予定のないマシンでない限り、最適なのはで構成すること~/.ssh/configです。

私は次のようなファイルを置きます:

Host office-machine
Hostname yochay-machine.internal.company.local
ProxyJump bastion-machine

Host bastion-machine
Hostname organization-server.company.com
...

ProxyJumpをサポートしていない以前のバージョンのOpenSSHを使用している場合は、同等のバージョンに置き換えます。

ProxyCommand ssh -W %h:%p bastion-machine

そして、あなたのローカルsshバージョンがサポートしていない本当に古いバージョンであった場合-W

ssh bastion-machine nc %h %p

ただし、最後の1つには要塞マシンがncインストールされている必要があります。

sshの長所は、ファイルの各宛先を構成できることであり、それらは非常にうまくスタックされます。したがってoffice-machine、直接接続であったため、すべてのツール(ssh、scp、sftp ...)でホスト名として使用することになり、ssh_configに基づいて接続する方法がわかります。またHost *.internal.company.local、特定の要塞を通過するように、すべてのホストを終了させるようなワイルドカードを使用することもできます。これはすべてのホストに適用されます。正しく構成すると、1ホップ接続を行う場合と20ホップ接続を行う場合の唯一の違いは、接続時間が遅くなることです。


36

最新のOpenSSH(8.0)を使用している場合は、-J(jump)スイッチを使用できます。

scp -J user@intermediate user@target:/path

古いバージョン(ただし、少なくとも7.3)では、コマンドラインでProxyJumpdirectiveを使用できます:

scp -o ProxyJump=user@intermediate user@target:/path

または、ssh_config@Ángelの答えが示すように、ファイルで。


ProxyCommandまたはポート転送のような他のオプションがあり、古いバージョンのOpenSSHでも使用できます。これらはで説明されていないOpenSSHのサポートマルチホップログイン?


2
@yochaymaganssh -J userA@orgserv userB@officecomp cat remote/path > local/path
mosvy

4
scpの場合、7.10で追加されました
アンヘル

4
scpサポートしていなくても-JProxyJumpオプションをサポートするのに十分なほど新しい可能性があります。このオプションを明示的に使用する他の回答のいずれかを試してください。
ゴードンデイヴィソン

2
これは受け入れられた答えであるはずです。単純なコマンドラインオプションで十分な場合、特定のホスト用にssh変更することを提案する質問に対するすべての回答を軽deしていますconfig
クレミッシュ

2
「軽sp」は極端な反応のようです。もちろん、最初に構成ファイルを変更するよりも、コマンドラインをすばやく変更する方が簡単な場合があります。ただし、同じホストに複数回接続することを計画している場合は、接続するたびに使用するよりも、必ず構成ファイルを1回更新することをお勧めします-J user@intermediate
chepner

10

パイプラインを使用することもできます。その時は今日です。

ssh -A user@host1 ssh user@host2 cat filename > filename

あなたもアップロードできます

ssh -A user@host1 ssh user@host2 cat \\\> filename < filename

プロキシなどを含む他のソリューションもありますが、これを行う方法を知っていると便利です。


cat!の便利な使用
Piskvor

これにより、中間ホストの十分な特権を持つユーザーがsshエージェントとキーにアクセスできることに注意してください。ホストとhost2の間を流れるデータも、host1には暗号化されずに存在します。プロキシを使用する方法と上記のジャンプは、これらの問題の両方を回避します。
ジェームズ

@james:私は気付いていません。このような要塞ホストは通常​​、非常に信頼できます。
ジョシュア

7

ProxyJump構成を使用します。

ProxyJump
[user @] host [:port]またはssh URIとして1つ以上のジャンププロキシを指定します。複数のプロキシはコンマ文字で区切られ、順次アクセスされます。このオプションを設定すると、指定されたProxyJumpホストへのssh(1)接続を最初に行い、そこから最終的なターゲットへのTCP転送を確立することにより、ssh(1)がターゲットホストに接続します。

scp -o ProxyJump=user@intermediate user@target:/path

2

ZMODEMと呼ばれる古代のプロトコルがあります。最近ではそれをサポートするプログラムはほとんどありませんが、機能する場合は非常に便利です。

まず、ラップトップの端末プログラムがZMODEMをサポートしているかどうかを確認してください。(たとえば、ZMODEMをサポートするようにiTerm2(Mac)を構成できます。サンプルスクリプトはこちらから入手できます。)

オフィスマシンで、次を実行します。 sudo apt install lrzsz

今、あなたがしなければならないのは、あなたのオフィスのマシンにsshして、実行するだけsz (filename)です。ファイルは端末からダウンロードされます。


1

ユーザーのsshでの構成: ~/.ssh/config

Host *
    UserKnownHostsFile=/dev/null
    StrictHostKeyChecking=no
    ServerAliveInterval 300
    ServerAliveCountMax 2
    ForwardAgent yes


Host jump server
    HostName server.company.org
    User root

Host jump1 server1
    HostName server1.dmz.company.org
    User root
    ProxyJump jump

Host jump2 server2
    HostName server.dmz2.company.org
    User root
    ProxyJump jump1

Host *.intranet.company.org
    User user
    ProxyJump jump2

イントラネットサーバーから3ジャンプサーバー経由で直接コピーできるようになりました。

scp user@server.intranet.company:/home/user/ ./*

これは、scpでジャンプサーバーを指定する必要がなくなったためです。


0

SCP -3経由:

scp -3 user1@remote1:/root/file1.txt user2@remote2:/root/file1.txt

2
この-3オプションは、「2つのリモートホスト間のコピーがローカルホストを介して転送される」と説明されています。この質問は、ローカルホストが「remote2」にアクセスできなかったと規定していると思います。
ジェフシャラー

2
@JeffSchaller:途中でマシンに接続してから、使用します-3。ただし、これは、中央のマシンから最初のマシンに接続できることを前提としています。
ジョー

-J/ に対するこの利点は見当たりませんJumpHost。@Joeが言及している制限があるため、まったく逆です。
マーティン・プリクリル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.