ローカルマシンから1つのコマンドを使用してプロキシ経由でScpを実行しますか?


50

local.machine、proxy.machine、target.machineがあります。local.machineはtarget.machineと直接接触しませんが、proxy.machineを経由する必要があります。

target.machineからlocal.machineにファイルをscpします。これは、local.machineから1つのコマンドだけで実行できますか?

回答:


61

私はこれが遅い回答であることを知っていますが、これを行うためのクールな方法を見つけました。それは基本的にホルガージャストの答えですが、保存された構成ファイルに:

これ~/.ssh/configをlocal.machineのファイルに配置する必要があります(ファイルが存在しない場合は作成します)

Host target.machine
  User          targetuser
  HostName      target.machine
  ProxyCommand  ssh proxyuser@proxy.machine nc %h %p 2> /dev/null

ファイルを保存した後、使用することができます

ssh target.machine

接続したいときはいつでも。ssh構成ファイルも尊重するため、Scpも機能します。GNOMEを使用していてGUIを使用したい場合は、Nautilusも同様です。


5
ちょっとしたメモ。sshの-iコマンドラインオプションで代替IDファイルを使用している場合、ProxyCommand構成とsshコマンドラインの両方にそのオプションを指定する必要があります。
ビルマン

7
役立つ可能性のある3つのこと、1)Host proxy.machine同じ~/.ssh/configファイル内の行も表示すると役立ちます、2)これらのコマンドをネストできるかどうかを示します(つまり、クライアントが接続するプロキシホスト2に接続するプロキシホスト1に接続します)。 ..target)および3)nc %h %p意味
puk

プロキシを使用してローカルマシンからターゲットマシンにコピーするにはどうすればよいですか?
ムラガラ

19

1つのコマンドで実行できますが、プロキシマシンにnetcat(nc)をインストールする必要があります。

ssh -o "ProxyCommand ssh poxyuser@proxy.machine nc -w 1 %h 22" targetuser@target.machine

[編集:マシンの順序を混同...]


良い試みですが、プロキシとログインにユーザー名をどこに追加すればよいですか?
GRM

マシン名の前のJzst、@。それを反映するように回答を編集しました。
ホルガー

18

scpの代わりにrsyncを使用しても構わない場合は、次のワンライナーを使用できます。

rsync -v --rsh "ssh proxy.machine ssh" target.machine:/remote/file /local/dir/

(プロキシマシンへのパスワードなしのアクセスが必要です)


18

どこでも必要なく 、これをワンライナーとして実行できます* nc

scp -o "ProxyCommand ssh pcreds@proxy.machine -W %h:%p" tcreds@target.machine:file .

説明

pcredsそしてtcreds、あなたのプロキシを表しており、必要に応じて(資格情報をターゲットusernameusername:passwordなど)。

これは、組み込みのnetcatのような機能により可能ncになり、中間ホストでの要件がなくなります。を使用ssh -W host:portすると、指定されたホストとポートへのトンネルが設定され、それがstdin / stdoutに接続さscpれ、トンネルを介して実行されます。

指定したターゲットホストとポートに置き換えられます。%h%pProxyCommand

さらに便利なように、ssh構成でプロキシを構成できます。

Host target.machine
    ProxyCommand ssh pcreds@proxy.machine -W %h:%p

そしてそれから

scp tcreds@target.machine:file .

* OpenSSH 5.4以降- 2010年3月にリリース


1
これが実際に機能することを確認し、古いNCプロセスがプロキシマシン上に配置されたままにならないようにします。
LaXDragon

1
プロキシのポートはどこで指定できますか?
Marged

1
@Marged私は現時点ではここでそれをしようとする立場にないんだけど、私はあなたには、することができるはずだと思う-p <portnum>前に、-Wプロキシポートを指定する方法のいずれかで
CupawnTae

1
-iオプション(必要な場合)が引用符の内側にあることを理解するのに時間がかかりました。プロキシsshは、デフォルトではscpに直接提供される-iオプションで指定された同じ秘密鍵を使用しません。あなたがそれについて考えるとき、それは明らかだと思います。
キーリー

8
$ ssh -f -N -L <localport>:<target.machine:port> user@proxy.machine
$ scp target-user@local.machine:/remote/file -P <localport> .

OK、実際には2つのコマンド...


1
プロキシのポートを指定するにはどうすればよいですか?私の場合は8080
Marged

@Margedを-p <portnumber>sshコマンドに追加
-weeheavy

6

ワンライナー?私の頭の上ではありません。最初にプロキシを確立する必要があり、scpだけではプロキシを確立できません。

手動で行う場合、トンネルのスクリーンセッションを開きます。

screen -S tunnel

画面は、トンネルをバックグラウンドシェルに保持するために使用されます。バックグラウンドでトンネルを開いたままにするための任意の手法を使用します(@weeheavyの答えはおそらく最も簡単です)。スクリーンセッションに入ったら、次のようにトンネルを開始します

ssh -L 2222:target.machine:22 [user@]proxy.machine

これを分解するには、基本的に「ローカルマシンでポート2222を開くと、localhost:2222にアクセスする接続はproxy.machineを介してtarget.machine:22にプロキシされます」

ssh接続とトンネルが確立されたら、「Ca d」を使用して画面セッションから切り離します。そのスクリーンセッションに戻るには、次を入力します。screen -raAd tunnel

元のシェルに戻ると、scpコマンドは次のようになります。

scp -P 2222 localhost:your/file/on/target.machine local/path

localhostポート2222は、実際にはtarget.machineに向かう単なるトンネルであることに注意してください。


3

scpはsshのように「-o」オプションをサポートしているように見えますが、プロキシユーザー名/パスワードを渡す方法がわかりません。

scp -o "ProxyCommand=nc -X connect -x proxyhost:proxyport %h %p" remote_user@remote_host:remote_path local_path

表示される場合nc: invalid option -- Xhttps://stackoverflow.com/a/23616021/32453を参照してください


麻薬仲間、すぐに働いた:)
Elouan Keryell-Even

2

どうですか:

scp -o "ProxyCommand ssh user@myproxyserver.com nc %h %p" your.filename username@yourdestination.yourdomain.com:/whatever_location

またはおそらくusername:password here?
rogerdpack

1

次のようなものを試すことができます:

ssh user@proxy.machine "ssh user@target.machine 'cat > file'" < file

しかし、proxy.machineがパスワードを要求する必要がある場合は機能しません(SSHはTTYにないため、askpassは失敗します)。

複数のファイルがある場合は、次のようなtarを使用できます(テストされていない、通常はそのようにnetcatを使用します)。

tar cf - file1 file2 folder1/ | ssh user@proxy.machine "ssh user@target.machine 'tar xvf -'"

0

別の簡単な解決策を転送するためのsource_fileをからsource_hostこのdestination_host経由PROXY_HOST

proxy_serverにログインします

ssh login@proxy_host

プロキシサーバーから、source_filesource_hostからdestination_host転送します\以下に示すように、これを1行として入力するか、を省略して、または2行として入力できます)。

scp login@source_host:/path_to_source_file \
  login@destination_host:/path_to_destination_directory

これには、source_hostからproxy_hostへのログインにrsa_keyを使用する必要があります。


0

公開鍵を使用する必要がある場合は、このようなものが必要になります。

Host target-machine
  User          target-user
  HostName      target.example.com
  IdentityFile  /path/to/file.pem
  ProxyCommand  ssh bastion -W %h:%p

Host bastion
  User         bastion-user
  HostName     bastion.example.com
  IdentityFile /path/to/file.pem
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.