SSH経由でシステムにログインしている場合、別のターミナルまたはスクリーンセッションを起動してscpなどを実行せずに、またはリモートシステムからSSHを使用せずにローカルシステムにファイルをコピーして戻す方法はありますか?ローカルシステム?
事前に計画しておくと最も簡単です。
マスター接続を初めて開きます。後続の接続では、既存のマスター接続を介してスレーブ接続をルーティングします。 ~/.ssh/config
で、接続共有が自動的に行われるように設定します。
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
既存の接続と同じ(ユーザー、ポート、マシン)に対してsshセッションを開始すると、2番目のセッションは最初のセッションを介してトンネリングされます。 2番目の接続の確立には、新しい認証は必要なく、非常に高速です。
そのため、アクティブな接続が確立されている間は、次のことがすばやくできます。
scp
またはrsync
を使用してファイルをコピーします。既存の接続では、リバース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。詳細については、マニュアルの「エスケープ文字」を参照してください。
this Server Fault thread にも興味深い情報があります。
ファイルが小さい場合は、入力してターミナル出力からコピーして貼り付けることができます。ファイルに印刷できない文字が含まれている場合は、 base64 などのエンコーディングを使用します。
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 -
別の(IMO)簡単な方法は次のとおりです。
# to remote Host
cat localfile.conf | ssh user@hostname 'cat -> /tmp/remotefile.conf'
# from remote Host
ssh user@hostname 'cat /tmp/remotefile.conf' > /tmp/localfile.conf
または、GUIのようなものを好む場合は、 Midnight Commander を試してください。彼らは機能Shell-Linkと呼びます。ほとんどのディストリビューションでは、パッケージシステムにmc
としてemが含まれています。
SSHは、エスケープ文字(デフォルトでは~
)を介していくつかのコマンドをサポートしています。
$ ~?
Supported escape sequences:
~. - terminate connection (and any multiplexed sessions)
~B - send a BREAK to the remote system
~C - open a command line
~R - Request rekey (SSH protocol 2 only)
~^Z - suspend ssh
~# - list forwarded connections
~& - background ssh (when waiting for connections to terminate)
~? - this message
~~ - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
$ ~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
!args Execute local command
!args
は、あなたが望むものに最も近いようです。 /etc/ssh_config
コマンドを機能させるには、~C
ファイルでPermitLocalCommand
を有効にする必要があることに注意してください(man ssh_config
を参照)。
ssh_config
にControlMaster
を設定すると、同じsshセッションを再利用できます。これを行う場合:
$ ~C
ssh> !scp file user@myserver:
技術的にはsshセッションを離れたことはなく、再認証する必要もありません。おそらくあなたが望むよりも複雑ですが、私は別の簡単な方法を考えることはできません。
これらはすべて非常に複雑な方法です。sshfs
を使用して、リモートファイルシステムをローカルマシンにマウントできます。
mkdir -p /mnt/sshfs
root@IS1300:~# sshfs 192.168.1.2:/ /mnt/sshfs
root@IS1300:~# umount /mnt/sshfs
次に、nautilus、gnome、konqueror、dolphin、bashなどのファイルをコピーして貼り付けます。
-R
、リモートからローカルへ)または転送(-L
、ローカルからリモートへのポートの場合、ファイル転送を実行するためのポート。ファイル転送デーモンがもう一方の端でリッスンしていると想定します。しかし、これらは本当に必要ありません、IMO。 SSHプロトコルは単一の接続で複数のチャネルをサポートし、OpenSSHクライアントは多重化をサポートします。あなたがControlMaster
とControlPath
を持っていると仮定すると セットアップ (ControlPersist
も便利です)、
#最初の接続 $ ssh remote #元のSSHが開いたのと同じ接続で多重化します $ sftpリモート
さらに簡単な方法:Filezilla(またはお気に入りのftpブラウザー)を開き、同じサイトへのssh接続を開き、ファイルを見つけてローカルファイル構造にドラッグします。 Filezillaを初めて使用する場合は、「サイトマネージャ」機能を使用して、次回にすばやく再接続します。
はい、私はこれがあなたのほとんどに明らかであることを知っていますが(正確には正確ではありません)、ターミナルのみのソリューションを検索しているこのスレッドを見つけた人(私のような)は、その見落としを見落としたかもしれません。
私が最良かつ最も効率的なソリューションであることがわかったのは、xclip-copyfile
およびxclip-pastefile
を使用することです。
サーバーでは、xclip-copyfile
を使用して1つ以上のファイルをコピーします。これらのファイルは、ローカルサーバーで使用できます。そこで、xclip-pastefile
を使用できます。
これにより、scp
を使用したり、ローカルのsshサーバーを用意したりする必要がなくなります。たとえば、cygwinでこれを使用します。唯一の問題は、xclip
をまだインストールしていない場合は、インストールする必要があることです。ああ、これはバイナリファイルでも機能します。
私たちが SecureCRT を使用する多くの理由の1つ—実用的なオープンソースソフトウェアを好むにもかかわらず—ファイル転送を容易にすることです。 F/OSSの世界では、直接的な代替品はありません。
SecureCRTは1990年代半ばに純粋なWindowsプログラムとして始まりましたが、Mac OS XおよびLinuxに移植されました 数年前 。
SecureCRTには、SSH接続先のシステムとの間でファイルを転送するための3つの主要な機能があります。
ZModem 、 YModem 、 XModem 、 Kermit およびASCII-SecureCRTは昔ながらの種類の端末エミュレータであり、いくつかの帯域内ファイル転送プロトコルをサポートしています。
最も使いやすいのはZModemです。リモートコマンドラインでsz file-to-download
のようなものを入力すると、リモートsz
プログラムが エスケープシーケンス を書き込み、SecureCRTにfile-to-download
のダウンロードをすぐに開始するように指示します。デフォルトのダウンロードディレクトリ。
いい感じは、ダウンロードディレクトリがセッションごとにカスタマイズできることです。これを使用して、本社のファイルサーバーにサイトごとのディレクトリを作成しているため、ダウンロードしたファイルを手動で並べ替える必要はありません。
(sz
は lrzsz
パッケージの一部である「ZModem送信」プログラムです。ほとんどのUnixyシステム用にすでにパッケージ化されています。何らかの理由でリモートシステムがまだインストールされていないため、簡単にバイナリパッケージをインストールすることはできません。ソースパッケージは小さく、移植性に優れています。複数回、lrzsz
"sharchiveを送信する必要がありました" または uuencode
'd tarball 削除されたリモートシステムにZModemファイルを追加できるようにします。)
[〜#〜] sftp [〜#〜]-SecureCRTは、緊密に統合された基本的なSFTP実装を備えています。
「緊密に統合されている」とは、SFTPメニューコマンドまたはキーボードショートカットを指定すると、同じSSH接続を介してリモートサイトに接続されている新しいタブが開くことを意味します。したがって、再度ログインする必要はなく、同じサーバーへの別のSFTP接続を開いた場合よりも少し速く接続が確立されます。
VanDyke Softwareには個別のファイル転送製品 SecureFX があるため、私はSFTP機能を「基本」として特徴付けています。組み込みのSFTPクライアントよりも機能が豊富で、SecureCRTとも統合されます。
SecureCRTのSFTP機能を使用すると、ZModem構成とは別のデフォルトのリモートおよびローカルディレクトリを構成できます。
このSFTP機能には、基本的なコマンドラインのインターフェースがあり、OpenSSHのsftp
プログラムを模倣していますが、次のようなアフォーダンスを備えています。 Tab コマンド補完。したがって、somefile.tar.gz
というリモートファイルを取得するのは、get so
と同じくらい簡単です。TabEnter。
ドラッグアンドドロップ-ファイルをターミナルウィンドウにドラッグアンドドロップすると、自動的にrz
が入力され、ファイルの送信を開始します。
または、SFTPタブを開いてファイルをそのタブにドロップし、SFTP経由で送信することもできます。したがって、リモートシステムへのファイルの送信は、次のように簡単です。 Alt-P、ドラッグ、ドロップ。
おそらくTCPベースのプロトコルであるため、転送がSFTPを介してはるかに速く行われることがわかります。そのため、大きな スライディングウィンドウ 現代の TCP/IPスタック の恩恵を受けます。 ZModemは、64 kiBのブロックサイズが「大きい」と考えられていた時代に設計されました。したがって、リンクの潜在的な速度の多くはZModemに吸収され、その間、両端はブロック転送の確認応答を待ちます。
ドラッグアンドドロップ操作の優れた点の1つは、ZModemを使用することによるストレスの1つを取り除くことです。リモートシステムでrz
と入力すると、SecureCRTはファイルピッカーを自動的にポップアップします。その後、リモート側がタイムアウトする前に、ファイルを見つけて選択するのに約1分かかります。これは、快適ではない、24時間レースのような雰囲気を作り出します。ドラッグアンドドロップにより、自由にファイルを見つけて、マウスを1回動かすだけで転送を開始できます。
私たちはまだ手動の方法を使用しており、明示的なrz
コマンドで転送を開始しています。これは、SecureCRTではセッションごとのアップロードディレクトリを構成できるためです。このディレクトリは、特定のリモートサイトで実行されているソフトウェアの最新のビルドが常に含まれているファイルサーバー上のフォルダーを指します。このような転送の場合、ファイルピッカーが正しい場所で開くため、時計との競合はありません。
使用する "!"ファイルをファイルのASCII表現に変換します(例:! uuencode myfile.bin >uuencode.dat
)。次に、! cat uuencode.dat >target.dat
を使用します。その後、ターゲット側でuudecodeを使用します:! uudecode target.dat >myfile.bin