リモートからローカルにログインしながら、ローカルのIPアドレスを知らずに、リモートからローカルにSCPすることは可能ですか?


31

私は定期的に、リモートターミナルセッションからローカルマシンにファイルをコピーしたいと思っています。通常、リモートセッションからログアウトし、ローカルからscp転送を呼び出して、リモートからローカルにファイルをコピーします。しかし、これは少し長く感じられます。時間を節約するために、SSH経由でリモートにログインしながらファイルを転送したいと思います。私のローカルマシンは動的IP範囲からインターネットに接続されているため、リモートで接続する方法がよくわかりません。しかし、確かに、リモートセッションは私のラップトップから発信されるため、ラップトップに戻るためのscpにはショートカットが必要です。

回答:


20

これにはSSHトンネリングを使用できます。

トンネリングを使用すると、ローカルマシンからリモートマシンに、またはリモートマシンからローカルマシンにTCPポートを転送できます。たとえば、ファイアウォールの背後にあるリモートマシンからSMTPまたはIMAPポートをローカルマシンに転送するために頻繁に使用します(そして、ローカルで実行されているかのようにローカルでサービスにアクセスします)。

ローカルマシンからリモートマシンにポート22(SSH)を転送するには、次を試してください。

ssh -R12345:localhost:22 yourremoteuser@remotemachine

(localhostはリモートマシンのローカル名を指すことに注意してください)

これを実行すると、以下を使用してsshを実行できるようになります。

ssh -p12345 yourlocaluser@127.0.0.1

scpを使用するときは、次のようにします(scpにはポート転送用の大文字のPがあります)。

scp -P12345 filename 127.0.0.1:/tmp/filename

(リモートからローカルへの)他の方向のポート転送では、-Rの代わりに-Lが使用されます。

上記のコマンドは、ターミナルsshクライアントを使用していることを前提としています。Windows用PuTTYなどのグラフィカルクライアントもトンネリングをサポートしています


IPが静的ではないOPの質問には答えません。

2
何かを見逃していない限り、OPが現在のリモートマシンからローカルに接続するのに十分なはずです。トンネリングはSSHセッションを介して行われます。動的ローカルマシンからリモートへのSSH接続がセットアップされると、SSH接続は成功し、リモートマシンのリッスンポートをセットアップして、元の場所にトンネルします。

これには、OPがローカルマシンでSSHサーバーをセットアップし、認証を処理する必要があります。そのため、これはいくつかのユースケースでの価値よりも厄介な場合があります。
セプタグラム

これは動的IPで機能するだけでなく、リモートからローカルへのssh接続を禁止するファイアウォールを越えて機能します。非常に便利な答えです!

3
~Cエスケープを使用してリモートポート転送を設定すると、さらに便利になります。を入力するだけで<Enter>~C-R 12345:localhost:22<Enter>、すでに確立されているSSHセッションを離れることなくトンネルを作成できます。

6

リモートマシンのコマンドラインで次を試してください。ルーターでポート転送を有効にする必要がある場合があります。

scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>

ソース:接続元のホスト(commandlinefu.com)にファイルを簡単に戻す


1
これに遭遇した人々のためにこれが何をするかを説明するため${SSH_CLIENT%% *}に、ローカルマシンのIPを出力します。そのため、コマンド全体がファイル転送のためにリモートマシンからローカルマシンへのscpセッションを開きます。これは、リモートマシンからローカルマシンにSSH接続できる場合にのみ実行できます。
ビジ

2
これはexport ME="${SSH_CLIENT%% *}"、シェルrcファイルに何かを追加することでさらに改善でき ます。その後、単に使用することができますscp <file> $ME:<local path>
kralyk

ただし、これは機能しますが、注意してください。VPN経由でログインした場合、ファイルはお使いのマシンではなく、別の場所に保存されます。
KAP

1

たぶんzssh

zssh(Zmodem SSH)は、セキュアシェル(ssh)を使用しながら、リモートマシンにファイルをインタラクティブに転送するためのプログラムです。scpの便利な代替手段として、別のセッションを開いて自分自身を再認証することなくファイルを転送できるようにすることを目的としています。

zsshはsshのインタラクティブなラッパーです

zmodemファイル転送の由緒あるrz、sz実装を使用します。


1

この質問を支持して、これも私が簡単に達成したいことです。

関連する回答は次のとおりです。ホームネットワークの外にいるときに、リモートマシンからローカルマシンにSCPを送信するにはどうすればよいですか。

ネットワークの外部からsshへのアクセスを許可する必要があります。これは、ブロードバンドルーターのポートをサーバーのLAN IPに転送することにより行われます。ただし、外部からのsshアクセスの許可にはセキュリティ上の懸念があるため、ssh、特にキーベースの認証を保護し、パスワード認証を完全に無効にする方法を検討することもできます。


0

1つの解決策は、ローカルマシンでsshセッションを中断し、ローカルマシンでコピーを実行してから、中断したところからsshセッションを再開することです。

たとえば、myuser @ remoteに接続していて、ファイルlol.txtをローカルコンピューターにコピーするとします。まず、ローカルマシンでsshを一時停止します。通常はCtrl- Zを使用して中断しますが、リモートシェルに送信されるため、sshでは機能しません。代わりに、sshエスケープシーケンスを使用する必要がありますEnter~。sshプレスを中断するにはEnter~ Ctrl- Z。これで、ローカルマシンでコマンドを実行できます。

user@localmachine:~$ scp user@remote:/path-to-file/lol.txt /dest-path/lol.txt

ファイルをコピーしてから、それを残した場所に正確にsshに戻る

user@localmachine:~$ fg


しかし、問題は、リモートからのコピーされていない、問題はリモートにコピーされ、私はシェルを一時停止すると、その...アドレスには何もありませんどのように表示されない
アレックス

まあそれは他の方法でも動作します。アイデアは、セッションを終了するのではなく中断することです。これにより、少なくとも少し簡単になります。
スティーンシューット

0

より簡単なソリューションが必要な場合は、dropboxアカウントを開き、リモートマシンに移動してwgetを実行します(ここからの修正バージョン)。 wget --no-check-certificate https://www.dropbox.com/s/2123jshf/ABC.pdf?dl=1 -O abc.pdf

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