sshd
があるとすると ローカル マシンで実行されている場合、それは可能であり、発信 IP アドレスを知る必要はありません。 SSH ポート フォワーディングが有効になっている場合は、既に ssh 接続を開いている場合でも、それを終了せずに安全なトンネルを開くことができます。
あるサーバーへの ssh 接続があるとします:
local $ ssh [email protected]
Password:
remote $ echo abc > abc.txt # now we have a file here
さて、そのファイルをローカル サーバーにコピーして戻す必要がありますが、何らかの理由で新しい接続を開きたくないのです。 OK、Enter ~C
を押して ssh コマンドラインを取得しましょう (入力、チルダ、大文字の C):
ssh> help
Commands:
-L[bind_address:]port:host:hostport Request local forward
-R[bind_address:]port:host:hostport Request remote forward
-D[bind_address:]port Request dynamic forward
-KR[bind_address:]port Cancel remote forward
これは通常の -L/R/D
と同じです。 オプション。 -R
が必要です 、だから Enter ~C
にヒットします もう一度入力してください:
ssh> -R 127.0.0.1:2222:127.0.0.1:22
Forwarding port.
ここでは、リモート サーバーのポート 2222 をローカル マシンのポート 22 に転送します (ここで、ローカル SSH サーバーをポート 22 で開始する必要があります。他のポートでリッスンしている場合は、22 の代わりにそれを使用してください)。
scp
を実行するだけです リモート サーバー上でファイルをリモート サーバーのポート 2222 にコピーします。このポートはローカル マシンのポート 22 にマップされます (ローカルの sshd
実行中です)。
remote $ scp -P2222 abc.txt [email protected]:
[email protected]'s password:
abc.txt 100% 4 0.0KB/s 00:00
これで完了です!
remote $ exit
logout
Connection to example.com closed.
local $ cat abc.txt
abc
トリッキーですが、本当にできない場合は scp
を実行するだけです
SUでのこのワンライナーソリューションは、受け入れられている回答よりもはるかに簡単であることがわかりました。ローカルIPアドレスに環境変数を使っているので、事前にわからないというOPの要望にも応えられると思います。
それに基づいて、ファイルを「ダウンロード」する bash 関数があります (つまり、SSH セッションからローカル マシン上の設定された場所にプッシュします)
function dl(){
scp "$1" ${CLIENT_IP%% *}:/home/<USER>/Downloads
}
これで dl somefile.txt
を呼び出すことができます リモートと somefile.txt
に SSH 接続している間 ローカルのダウンロード フォルダに表示されます。
エクストラ:
- RSA キー (ssh-copy-id) を使用してパスワード プロンプトを回避します
- ローカルの bashrc が scp 呼び出しで供給されないようにするこのトリックを見つけました
注:これには、リモートからローカル マシンへの SSH アクセスが必要です (これはよくあることですか?)