SSH経由でローカルシステムにscp

SSH経由でローカルシステムにscp

私のローカルコンピュータでは、リモートコンピュータのファイルをコピーできます。

scp remote:/some/file/path ~

しかし、すでにSSH経由でリモートコンピュータに接続されている場合はどうなりますか?私はこんなことをすることができますか?

ssh remote
cd /some/file
scp path local:~

localどういうわけかSSH経由で接続されているコンピュータで確認されます。~から。ローカルコンピュータがSSHサーバを実行していて、リモートコンピュータがSSHサーバに接続するように設定されている場合、これは確かに可能ですが、必ずしも可能ではありません。

そのようなことは可能ですか?

ベストアンサー1

コメントで述べたように、以下を使用することをお勧めしますsftp

$ sftp remote
user@remote's password: 
Connected to remote.
sftp> pwd
Remote working directory: /home/user
sftp> cd /etc
sftp> get fstab
Fetching /etc/fstab to fstab
/etc/fstab                                 100%  435     0.4KB/s   00:00    
sftp> 

やや...ハッキングのもう1つのアプローチは、nc(別名netcat)と組み合わせたSSHのポート転送機能を乱用することです。ネットワーキング機能を備えたツールでncある「ネットワーキングのスイス軍用ナイフ」(より小さいもの…そしてsocatMultiTool®に似ている)ですcat

アイデア:sshリモートシステムのリモートポートをクライアントのローカルポートに転送し、この接続を使用してデータをパイプするように指示しますnc

  1. 接続$remote設定リモートポート転送:

    client:~> ssh -R 8888:localhost:8888 $remote
    

    これにより正常な接続が確立されますが、さらにリモート側がリッスンしているポートも$remote通知されます。リモート側ポートに何かが接続されると、クライアント(つまりクライアント)ポートへの接続が開き、リモート側ポートに送信されるすべての内容がこのポートに転送されます。ssh88888888sshlocalhost88888888

  2. クライアントをリッスンするポートを使用してください8888(したがってssh接続するものがあります)nc。後でストリームを送信するncため、出力(クライアント)をパイプとして受け取ります。tartar

    client:~> nc --recv-only -l -p 8888 | tar xvf -
    
  3. リモート側で現在の作業ディレクトリを目的の場所に変更します。

  4. 正しい場所にいる場合は、コピーしたいtarファイルを収集し、以下を使用して(リモート側)に転送しますnc

    server:~> cd /path/with/those/files
    server:files> tar cvf - ./some/files | nc --send-only 127.0.0.1 8888
    
  5. Magic™が発生します。

メモ:AFAIKのみ少しずつ異なる実装が3つ以上ありますnc--send-only--recv-onlyネットキャット6。実装がこれらの(または同様の)オプションをサポートしていない場合は、発信者がtar終了してCtrl- に達することを確認する必要があります。通常、永遠に待機して処理しません(処理して自動的に接続を閉じるように指示します)。CncEOF--send-only

別の注意事項:直接使用することもできますが、ポート転送をnc使用すると、sshデータがSSH接続を介して転送されるため、2つの問題を回避できます。まず、データがまだ暗号化されて送信され、2番目に、クライアントがNATの背後にある場合、これは次のようにも適用されます。から直接アクセスできないファイアウォールやその他のサービス$remote

おすすめ記事