ローカルのUbuntuマシンからリモートのUbuntuマシンにSSHトンネリングし、リモートのUbuntuからローカルのUbuntuにファイルをコピー/移動したい。
SSHセッション内から(つまり、リモートUbuntu内から)する必要があります。
これらは機能しませんでした:
scp [remote-source] [local-destination] # Which is actually:
scp /home/user/files_to_depart/file1.txt /home/user/files_that_arrived/file1.txt
さもなければこれをどのように行うことができますか?
nullmetaの答え は完全に有効であり、おそらく、nullmetaは編集して、探している説明を提供します。ネットワーク構造(NATファイアウォール)が原因でローカルシステムに単純にsshすることが困難な場合があることを考慮して、個別のソリューションをすべて掲載しています。
ComputerAとComputerBの2台のコンピューターがあるとします。 ComputerAはローカルワークステーションです。 ComputerBは、ssh経由でアクセスできるリモートマシンです。
シナリオ1:ComputerAがNATファイアウォールの背後にないの場合
これはSwiftであり、scpとsshを組み合わせた簡単なソリューションです(scpはsshプロトコルを使用して安全なコピーを実行します)。両端(computerAとcomputerB)にsshサーバー(およびクライアント)をインストールする必要があります。
このソリューションを使用するには、ComputerBから実行します。
scp /path/to/file/on/ComputerB ComputerAUser@ComputerA:/path/to/dump/file/on/ComputerA
シナリオ2:ComputerAがNATファイアウォールの背後にあるの場合
このシナリオでは、通常、NATファイアウォールでポート転送を構成する必要があります。ただし、これらの種類の変更を行うためのアクセス権が常にあるとは限りません。この場合、ComputerA-> ComputerBからsshトンネルを構成して、逆接続もトンネルできるようにします。
Ssh接続ComputerA-> ComputerBを確立するときは、-Rオプションを次のように設定します。 ssh ComputerBUser@ComputerB -R 2222:localhost:22
ここで、ComputerBUser
は、認証されるComputerBのアカウントのユーザー名であり、2222
はComputerBの空きポートです。このポートを使用して、逆トンネルでComputerBからComputerAに戻ります。
from ComputerB、次の方法でscpコマンドを発行して、ComputerB-> ComputerAからファイルをコピーできます。ComputerAUser
はComputerAのユーザー名です。
scp -P 2222 /path/to/file/on/ComputerB ComputerAUser@localhost:/path/to/drop/file/on/computerA
ここで何が起こっていますか? ComputerAの代わりにlocalhost
を渡すので、単にComputerBにファイルを自分自身に送り返すように指示しているように見えます。実際、scpにファイルをComputerBに渡すように伝えていますが、ポート2222に渡します。ComputerBのポート2222へのすべての接続は、ComputerAのポート22(デフォルトのsshポート)に転送されます。したがって、既存のssh接続を逆方向にトンネリングすることにより、ComputerAがNATファイアウォールの背後にあることは問題になりません。
シナリオ3:ComputerAからのファイルコピーの実行
または、ComputerBから実行するのではなく、ComputerAからscpコマンドを実行するだけです。
scp ComputerBUser@ComputerB:/path/to/file/on/ComputerB /path/to/dump/file/on/ComputerA
リモートマシンのファイルシステムを参照し、特定のファイルをローカルマシンにコピーする簡単な方法(およびその逆)が必要な場合は、 SSHFS を使用できます。
説明
man sshfs
から:
SSHFS(Secure Shell FileSystem)は、Linux(およびFuse実装を備えた他のオペレーティングシステム)用のファイルシステムであり、リモートコンピューター上の安全なシェルログインのみを使用してリモートコンピューター上のファイルを操作できます。 。 SSHFSがマウントされているローカルコンピューターでは、実装はFuse(ユーザー空間のファイルシステム)カーネルモジュールを使用します。これの実際的な効果は、エンドユーザーが、まるで自分のコンピューター上のローカルファイルであるかのように、SSHを介して安全に提供されるリモートファイルとシームレスに対話できることです。リモートコンピューターでは、SSHのSFTPサブシステムが使用されます。
apt show sshfs
から:
sshfs
は、SSH File Transfer Protocolに基づくファイルシステムクライアントです。ほとんどのSSHサーバーはすでにこのプロトコルをサポートしているため、設定は非常に簡単です。つまり、サーバー側では何もする必要がありません。クライアント側では、sshを使用してサーバーにログインするのと同じくらい簡単にファイルシステムをマウントできます。
インストール
Sudo apt install sshfs
このガイドとは異なり Ubuntu 16.04で他に何もしていません。 Fuse
ユーザーグループはありません。
使用法
適切なマウントディレクトリを作成します。次に例を示します。
mkdir ~/sshfs-mount-point
リモートパスをマウントします:
デフォルトのssh設定を使用する場合は、リモートパスをマウントします:
sshfs user@IP:/remote/path ~/sshfs-mount-point
カスタムssh設定を使用する場合、リモートパスをマウントします:
sshfs -o IdentityFile=/path/to/id_rsa,port=2222 user@hostname-or-IP:/remote/path ~/sshfs-mount-point
~/.ssh/config
ファイルを適切に設定したら、リモートパスをマウントします:
sshfs hostname:/remote/path ~/sshfs-mount-point
リモートパスをアンマウントします。 2つの方法があります。
fusermount -u ~/sshfs-mount-point
Sudo umount ~/sshfs-mount-point
質問に応じた使用法
マシンからsshに接続している間AマシンにBであり、かつableからssh接続を確立するためにB to A。上記の方法のいずれかを使用して、A on Bからフォルダーをマウントできます。次に、 cp
、 rsync
または mc
を使用してファイルをコピーします。
マシンからSSH接続している間AマシンにBであり、かつできませんからSSH接続を確立する- B to A。マシンに専用フォルダーを作成できますB、ファイルをそのフォルダーにコピーします。このフォルダをマシンにマウントしますAそしてこれらのファイルを好きな場所に移動します。このタスクを処理する cronjob または bash script を設定できます。
SSHセッションに参加せずに使用したい
scp user@remotehost:/file/to/copy /local/destination
ローカルマシンでsshdが実行されており、ポートが開いている場合、sshセッションでは次のことができます。
scp /remote/file user@localmachine:/destination/file
このリンクにはいくつかの回避策があります https://unix.stackexchange.com/questions/2857/ssh-easily-copy-file-to-local-system
編集:混乱をおaびします。最も簡単で効率的な方法は、2番目のターミナルを開いて、最初に述べたscpコマンドを実行することです。
ネットワークを介してコンピューターからコンピューターにファイルを移動するには、scp
ユーティリティを使用します(scp
は安全なコピーを表します)。 ssh
は、リモートログインアクセスにのみ使用されます。
すでにネットワーク上の別のコンピューターに正常にログインしているので、そこからファイルをローカルマシンにコピーするだけで済みますが、ローカルマシンでssh
デーモンを実行する必要があります。したがって、最初にインストールします。
$ Sudo apt-get install openssh-server -y
それが実行中であることを確認してください(青信号がそれを示しています):
$ systemctl status sshd
ローカルコンピューターにコピーする別のディレクトリにあるすべてのファイルをリモートマシンに配置します。次に、次のコマンドを使用します。
$ scp -r [DIRECTORY] [USER]@[IP_ADDRESS]:~/Downloads
-r
は、ディレクトリとそのすべてのコンテンツが再帰的に処理されることを意味します。簡単に言えば、これは、ファイルを含むディレクトリをコピーするたびに使用するオプションであることを意味します。 [DIRECTORY]
は、そのディレクトリへのパスです。 [USER]
はローカルマシンのユーザーです。 [IP_ADDRESS]
は、そのマシンのIPアドレスです。 :
の後のものは、ローカルマシンでファイルを保存する場所です。この場合、それはDownloads
フォルダーです。
これは、このプロセスが実際にどのように見えるかです: