SSH経由でシステムにログインしている場合、別の端末またはスクリーンセッションを起動してscpなどを実行したり、リモートシステムからSSHを実行したりせずにローカルシステムにファイルをコピーする方法はありますかローカルシステム?
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ます。詳細については、マニュアルの「エスケープ文字」を参照してください。
このServer Faultスレッドには、いくつかの興味深い情報もあります。
ファイルが小さい場合は、入力してターミナル出力からコピーアンドペーストできます。ファイルに印刷できない文字が含まれている場合は、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を呼び出します。ほとんどのディストリビューションは、それらのパッケージシステムでのemを持っていますmc
。
mc
使用するのが最も速いです。
tgz
常にファイルでこれをやっています:)
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
あなたが望むものに最も近いようです。コマンドを機能させるには、ファイルでPermitLocalCommand
有効にする必要があることに注意してください(を参照)。/etc/ssh_config
~C
man ssh_config
あなたが設定している場合は、同じSSHセッションを再使用することができますControlMaster
ではssh_config
。これを行う場合:
$ ~C
ssh> !scp file user@myserver:
技術的にsshセッションを終了したことがないため、再認証する必要はありません。おそらくあなたが望むよりも複雑ですが、私は別の簡単な方法を考えることはできません。
!args
ヘルプメッセージで見つけることができませんでした。
args
最初のヘルプメッセージ(にされていない~?
)が、2番目に(1が入るとssh>
、プロンプトをして~C
、一つは入力できhelp
でssh>
プロンプト)
これらはすべて非常に複雑な方法です。
以下を使用して、ローカルマシンにリモートファイルシステムをマウントできますsshfs
。
mkdir -p /mnt/sshfs
root@IS1300:~# sshfs 192.168.1.2:/ /mnt/sshfs
root@IS1300:~# umount /mnt/sshfs
次に、ファイルをコピーして、ノーチラス、ノーム、コンクレール、イルカ、バッシュなどを貼り付けます。
sshfs -oIdentityFile=~/.ssh/keyfile.pem user@192.168.1.2:/ /mnt/sshfs/
-R
ためのリバース(からリモートからローカル)またはフォワード(-L
からローカルからリモート)ポート。しかし、これらのどれも本当に必要ありません、IMO。SSHプロトコルは単一の接続で複数のチャネルをサポートし、OpenSSHクライアントは多重化をサポートします。あなたが持っControlMaster
てControlPath
設定していると仮定すると(ControlPersist
あまりにも便利です)、
#最初の接続 $ sshリモート #元のsshが開いた同じ接続で多重化されます $ sftp remote
さらに簡単なアプローチ:Filezilla(またはお気に入りのftpブラウザー)を開き、同じサイトへのssh接続を開き、ファイルを見つけて、ローカルファイル構造にドラッグします。Filezillaを初めて使用する場合は、「サイトマネージャー」機能を使用して、次回から再接続してください。
はい、私はこれがほとんどの人に明白であることを知っています(そして正確に正確ではありません)が、端末専用のソリューションを探しているこのスレッドを見つけた人(私のような)は明白なことを見落としているかもしれません。
ssh://SERVER
。
私が最良かつ最も効率的なソリューションであることがわかってきたことは使用することです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
一部である "ZModemの送信"プログラムlrzsz
です。ほとんどの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、drag、dropのように簡単です。
私たちは、転送は、それがTCPベースのプロトコルですおそらくので、はるかに高速SFTP経由して起こることがわかり、それは大きな恩恵を受けるスライディングウィンドウ現代のTCP / IPスタック。ZModemは、64 kiBブロックサイズが「大きい」と見なされていた時代に設計されました。したがって、リンクの潜在的な速度の多くはZModemに吸収され、各端はブロック転送確認応答を待機します。
ドラッグアンドドロップ操作の利点の1つは、ZModemを使用することでストレスの1つが取り除かれることです。あなたが入力するとrz
、リモートシステムでは、SecureCRTのは、自動的にファイルピッカーをポップアップ表示されます。その後、リモート側がタイムアウトする前に、ファイルを見つけて選択するのに約1分かかります。これは、快適ではないレースバイブを生み出します。ドラッグアンドドロップにより、自由にファイルを見つけて、マウスを1回すばやく動かすだけで転送を開始できます。
明示的なrz
コマンドで転送を開始する手動方式を引き続き使用します。これは、SecureCRTを使用するとセッションごとのアップロードディレクトリを構成できるためです。このディレクトリは、特定のリモートサイトが実行しているソフトウェアの最新ビルドを常に含むファイルサーバー上のフォルダーを指します。このような転送では、ファイルピッカーが正しい場所で開始されるため、クロックとの競合は発生しません。
scp file.foo user@myclient.com:file.foo
:P