システムにSSHで接続している場合は、他の端末や画面セッションを開始してscpなどを実行したり、リモートシステムからローカルシステムにSSHを使用せずにファイルをローカルシステムにコピーしたりする方法はありますか?
ベストアンサー1
主な接続
事前に計画を立てると、これが最も簡単です。
初めて基本接続を開きます。後続の接続の場合、スレーブ接続は既存のマスター接続を介してルーティングされます。あなたの~/.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
Enter -R 22042:localhost:22
Enter。詳細については、マニュアルの「エスケープ文字」を参照してください。
その中にも興味深い情報があります。このサーバー障害スレッド。
コピーして貼り付ける
ファイルが小さい場合は、それを入力してターミナル出力からコピーして貼り付けることができます。ファイルに印刷できない文字が含まれている場合は、次のようなものを使用してください。64ビットベース。
Remote.example.net$base64 <myfile (コピー出力)
local.example.net$base64 -d >myfile (クリップボードの内容を貼り付け) Ctrl+D
より便利には、X転送が有効になっている場合は、ファイルをリモートシステムにコピーしてローカルに貼り付けることです。データをパイプに入って出ることができます。xclip
またはxsel
。ファイル名とメタデータを保存するには、アーカイブをコピーして貼り付けます。
remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -