web-dev-qa-db-ja.com

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

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

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

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

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

31
Yohai Magan

前の回答では、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

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

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

37
Ángel

最近のOpenSSH(8.0)を使用している場合は、 -J(ジャンプ)スイッチ

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

古いバージョン(ただし7.3以上)では、コマンドラインで ProxyJumpディレクティブ を使用できます。

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

またはssh_configファイル、@Ángelの回答が示すとおり。


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

37
Martin Prikryl

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

ssh -A user@Host1 ssh user@Host2 cat filename > filename

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

ssh -A user@Host1 ssh user@Host2 cat \\\> filename < filename

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

10
Joshua

ProxyJump構成を使用します。

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

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

[〜#〜] zmodem [〜#〜] と呼ばれる古いプロトコルがあります。最近はいくつかのプログラムでサポートされていますが、機能する場合は非常に便利です。

まず、ラップトップのターミナルプログラムがZMODEMをサポートしているかどうかを確認します。 (たとえば、ZMODEMをサポートするようにiTerm2(Macの場合)を構成できます。サンプルスクリプトが利用可能です here )。

オフィスマシンで、次を実行します:_Sudo apt install lrzsz_

これで、オフィスマシンにSSHで接続し、sz (filename)を実行するだけです。ファイルは端末からダウンロードされます。

2
jick

ユーザーの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

これで、イントラネットサーバーからジャンプサーバーに直接コピーできます。

scp [email protected]:/home/user/ ./*

Scpでジャンプサーバーを指定する必要がなくなったため、これを優先します。

1
Lukáš Viktora

SCP -3を介して:

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