私のローカルコンピュータでは、リモートコンピュータのファイルをコピーできます。
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
ある「ネットワーキングのスイス軍用ナイフ」(より小さいもの…そしてsocat
MultiTool®に似ている)ですcat
。
アイデア:ssh
リモートシステムのリモートポートをクライアントのローカルポートに転送し、この接続を使用してデータをパイプするように指示しますnc
。
接続
$remote
設定リモートポート転送:client:~> ssh -R 8888:localhost:8888 $remote
これにより正常な接続が確立されますが、さらにリモート側がリッスンしているポートも
$remote
通知されます。リモート側ポートに何かが接続されると、クライアント(つまりクライアント)ポートへの接続が開き、リモート側ポートに送信されるすべての内容がこのポートに転送されます。ssh
8888
8888
ssh
localhost
8888
8888
クライアントをリッスンするポートを使用してください
8888
(したがってssh
接続するものがあります)nc
。後でストリームを送信するnc
ため、出力(クライアント)をパイプとして受け取ります。tar
tar
client:~> nc --recv-only -l -p 8888 | tar xvf -
リモート側で現在の作業ディレクトリを目的の場所に変更します。
正しい場所にいる場合は、コピーしたい
tar
ファイルを収集し、以下を使用して(リモート側)に転送しますnc
。server:~> cd /path/with/those/files server:files> tar cvf - ./some/files | nc --send-only 127.0.0.1 8888
Magic™が発生します。
メモ:AFAIKのみ少しずつ異なる実装が3つ以上ありますnc
。--send-only
--recv-only
ネットキャット6。実装がこれらの(または同様の)オプションをサポートしていない場合は、発信者がtar
終了してCtrl- に達することを確認する必要があります。通常、永遠に待機して処理しません(処理して自動的に接続を閉じるように指示します)。Cnc
EOF
--send-only
別の注意事項:直接使用することもできますが、ポート転送をnc
使用すると、ssh
データがSSH接続を介して転送されるため、2つの問題を回避できます。まず、データがまだ暗号化されて送信され、2番目に、クライアントがNATの背後にある場合、これは次のようにも適用されます。から直接アクセスできないファイアウォールやその他のサービス$remote
。