SSH経由でシステムにログインしている場合、別のターミナルや画面セッションを起動してscpなどを実行したり、リモートシステムからSSHを実行せずに、ファイルをローカルシステムにコピーして戻す方法はありますか。ローカルシステム?
承認された回答:
マスター接続
事前に計画しておくと最も簡単です。
初めてマスター接続を開きます。以降の接続では、既存のマスター接続を介してスレーブ接続をルーティングします。 ~/.ssh/config
で 、接続の共有が自動的に行われるように設定します:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
既存の接続と同じ(ユーザー、ポート、マシン)へのsshセッションを開始すると、2番目のセッションが最初のセッションにトンネリングされます。 2番目の接続の確立には、新しい認証は不要で、非常に高速です。
したがって、アクティブな接続があれば、すぐに次のことができます。
-
scp
を使用してファイルをコピーします またはrsync
; - sshfsを使用してリモートファイルシステムをマウントします。
転送
既存の接続では、リバースsshトンネルを確立できます。 sshコマンドラインで、-R 22042:localhost:22
を渡してリモート転送を作成します ここで、22042はランダムに選択された番号であり、リモートマシンの他のポート番号とは異なります。次に、ssh -p 22042 localhost
リモートマシンでは、ソースマシンに接続し直します。 scp -P 22042 foo localhost:
を使用できます ファイルをコピーします。
RemoteForward 22042 localhost:22
を使用すると、これをさらに自動化できます。 。これに伴う問題は、sshの複数のインスタンスを使用して同じコンピューターに接続する場合、または他の誰かがポートを使用している場合、転送を取得できないことです。
最初からリモート転送を有効にしていない場合は、既存のsshセッションで有効にできます。 Enterと入力します ~C
入力 -R 22042:localhost:22
入力 。
詳細については、マニュアルの「エスケープ文字」を参照してください。
このサーバー障害スレッドには、いくつかの興味深い情報もあります。
コピー&ペースト
ファイルが小さい場合は、ファイルを入力して、ターミナル出力からコピーアンドペーストできます。ファイルに印刷できない文字が含まれている場合は、base64などのエンコーディングを使用してください。
remote.example.net$ base64 <myfile (copy the output)
local.example.net$ base64 -d >myfile (paste the clipboard contents) Ctrl+D
より便利なことに、X転送をアクティブにしている場合は、ファイルをリモートマシンにコピーして、ローカルに貼り付けます。 xclip
との間でデータをパイプ処理できます またはxsel
。ファイル名とメタデータを保持する場合は、アーカイブをコピーして貼り付けます。
remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -