scpを使用して、ローカルディレクトリXからリモートディレクトリYにファイルを転送します


99

ここの他の質問やインターネット上のさまざまな「scpの使用法」チュートリアルを見て回ったが、何が悪いのかを整理することはできない。

私はLinux Mintを使用していますが、scpの仕組みを理解しようとしています。

ディレクトリ/ home / name / dir /にfile.ext(コンピューター上に)ファイルがあります

私はsshを使用してリモートマシンに接続します

ssh -p 2222 username@domain

パスワードを尋ねられ、シェルが表示されます:

username@domain ~ $

今、コマンドを発行すると(sshを実行する前にローカルディレクトリ / home / name / dirにいました):

scp -r -P 2222 file.ext username@domain 

出力は次のとおりです。

cp: cannot stat ‘file.ext’: No such file or directory

file.extの代わりに完全なパスを書き込むと同じ結果になります

scp -r -P 2222 /home/name/dir/file.ext username@domain 

また、サーバー管理者は、次のように、ファイルを(ルートの代わりに)リモートホームディレクトリにアップロードするように指示しました。

scp -r -P 2222 file.ext username@domain:~/

しかし、それを行って「Enter」を押すと、シェルがさらに入力を待っている場合のように何も起こりません。

私の問題の要約:

  • cp:そのようなファイルまたはディレクトリはありません
  • 〜/に「スタック」したシェル

助言がありますか?


問題が間違ったマシン上にあることだけに関連しているかどうかは少し不明です...実行しているホストを各コマンドの前に付けてください。例えば、localuser@machineA: ssh -p 2222 username@domain(あなたがマシンA上のlocaluserのようにsshコマンドを実行していることを示します)
ウムラウト

1
使用している場合scpリモート側は常に(例えば、コロンが含まれている必要がありremotehost:/tmp、それだけで(通常のコピーを行います、それ以外の)scp /tmp/foo.txt example.comコピーする/tmp/foo.txtローカルファイルにexample.com
ウムラウト

削除-rこれは(それがために使用されます単一ファイルをコピーするために必要されていないとして、フラグを再帰的にディレクトリをコピー)
ウムラウト

ssheセッション内で scpコマンドを発行していますか?ローカルマシンを使用している場合は意味があります。
アレクシス14

回答:


119

scpリモートではなく、ローカルマシンからコマンドを実行する必要があります。まったく必要ありませんssh

dragonmnl@local $ scp -P 2222 file.ext username@domain:~/ 

あなたも必要ありません-r

 -r      Recursively copy entire directories.  

すでにリモートマシンにログインしていて、ローカルマシンからコピーする場合は、ローカルマシンがインターネット経由でアクセス可能でsshセットアップされていることを確認する必要があります。私はこれがあなたが望んでいるものとは思わないが、もしそうなら、単にリモートからこれを実行する:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/

1
ありがとう。問題は、sshセッション内でscpを実行しようとしていたことです。今では動作します!
dragonmnl 14

28

リモートマシンとローカルマシン間でファイルをアップロード/ダウンロードする2つの方法を提供します(Mac Airを使用):

この場合、ローカルとリモートの間で「11.jpeg」をアップ/ダウンします。

1。

サービス上のファイルをローカルdirにコピーします。このコマンドを実行するには、sshにいるときではなく、ローカルのbashターミナルにいる必要があります。

scp username@domain:/home/xxx/xxx/11.jpeg /Users/username/Desktop/  

ローカルdirのファイルをリモートサービスにコピーします。また、ローカルbashターミナルにいる必要があります。

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. SSHログインしているときに同じ意図を達成するには、最初に「システム環境設定>共有>リモートログイン>すべてのユーザー」を設定する必要があります(「すべてのユーザー」に設定する必要があるかどうかはわかりませんが、 )」というメッセージがMacに表示されます。「このコンピューターにリモートでログインするには、ssh username @ xxxxxxと入力し、次のコマンドを入力します。

    scp username @ domain:/home/xxx/xxx/11.jpeg username @ xxxxxx:/ Users / username / Desktop /

上記のこのコマンドは、sshにログインしているときにリモートからローカルにファイルをダウンロードするためのものです。ファイルをアップロードするときに2つのパスを変更するだけです。


最後に、Filezillaはおそらく毎日の作業で最も便利なものだと思います~~
-maizer

5

このscpコマンドをリモートマシンで実行している場合file.ext、「ローカル」ファイル、つまりリモートマシンを探しています

リモートマシンからローカルマシンにファイルをコピーするには、scp -P 2222 username@domain:dir/file.ext localdir(例のようにリモートコンピューター上にあるfile.extと仮定して)を使用~/dirします。scpリモートマシンで実行する場合は、「ローカル」と「リモート」を逆にします。


1
OP ローカルからリモートにコピーしたいので、OPのタイトルを参照してください。
テルドン

おっと、あなたは正しいと思います。しかし、彼はどうやら...後方にそれをやっている
アレクシス

3

scpコマンドを使用する

フォルダーを転送する場合は、zip最初にフォルダーを転送するだけで、unzip後でそれを実行できます。

コンピューターから、これを実行します:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

これrootがあなたのアカウントであり10.145.198.100、リモートサーバーのIPアドレスです。リモートのフォルダーにコピーthe_file~/ます。

ファイルを解凍:

$ unzip the_zip_file.zip -d destination_folder

rootリモートマシン上でSSHアクセスさえするのはなぜですか?それはかなり安全ではありません。通常の使用方法を使用しsudoてから、そのマシンでルートが実行する必要のある操作を実行する方が適切です。
クサラナナンダ

1

ほんの少しの貢献で、多分それは私のような初心者に役立つでしょう:リモートディレクトリへのパスはこのように書かれるべきです: username@domain:~/remote_directory

ここで強調したいのは、常にそれを追加する必要があるということです :~/


0

ファイルをコピーするためのソリューションLinux clientLinux Server

  1. sshdを使用して、サーバーで実行されているかどうかを確認します。 ps aux | grep sshd

  2. https://www.tecmint.com/install-openssh-server-in-linux/OpenSSHを使用してインストールし ない場合sudo apt-get install openssh-server openssh-client

  3. サーバーを再起動し、それが検証sshd使用して実行されています ps aux | grep sshd

  4. /etc/ssh/sshd_config必要に応じてファイルを構成できますが、単純な構成には必要ありません

  5. を使用してポートが開いていることを確認します netcat nc -v -z 127.0.0.1 22

  6. Linuxクライアントからクライアントにファイルをコピーするには、Linux次のようにscpを使用します scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. ファイルがコピーされたことを確認ssh username@10.22.33.45するには、パスワードを使用 して入力します。

ファイルLinux clientを `Windows にコピーするソリューション

  1. MSのOpenSSHなど、WindowsでSSHサーバーを実行するための複数のクライアントがあります。

    モバSSH

    Bitvise SSHサーバー

  2. 上記のサーバーのいずれかをインストールし、ポート22が開いていることを確認してください

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = in action = allow protocol = UDP localport = 22

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = out action = allow protocol = UDP localport = 22

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = in action = allow protocol = TCP localport = 22

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = out action = allow protocol = TCP localport = 22

    netsh advfirewallはallprofilesの状態をオフに設定します

  3. これらのサーバーの比較:

    Bitvise SSHサーバー

    1. ネイティブcmdプロンプト、powershellプロンプト、オートコンプリートにほぼ近い機能を提供

    2. 高度な使用が必要な場合、カスタマイズのための追加機能を提供します

    3. 単純なニーズのユーザーカスタマイズは0 です。取得MobaSSHOpenSSH作業に多くの時間を費やした後、2分以内に開始しました。

    4. scpを使用してファイルをコピーするには: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. 個人使用は無料、プロフェッショナル使用は99ドル。非常に多くの機能と優れた統合のため、価格はお金の価値があります

    MobaSSH:

    1. 以下のようなシンプルなLinuxのコマンドウィンドウ上でLinuxシェルを提供しlscpfindに似などの仕事、MINGW64

    2. または を入力cmdしてpowershell直接アクセスできますcmdpowershell

    3. Unicodeサポートは貧弱です。エンコードが正しくありません。たとえばPython、インタープリターを開始しようとすると、クラッシュします。(https://stackoverflow.com/a/12834315/4752883)を使用してエンコードを手動で変更する必要がありますchcp 65001 set PYTHONIOENCONDING=utf-8 次に、Pythonプロンプトを起動します

    4. MobaSSHの素晴らしい点は、非常にシンプルなユーザーインターフェイスをscp持ちssh、統合されていることです。単純なユースケースでも機能します

    5. LinuxクライアントからWindows実行中のサーバーに ファイルをコピーするにはMobaSSH:use scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md これMobaSSHはに基づいてcygwinおり、そのドライブはcygwin-sドライブがマップされるのと同じ方法でマップされるためです。

    https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/からインストールされたOpenSSHv6.7でMicrosoftのVMを使用します 。OpenSSHv6.7は既にインストールされています。

    1. 非常にバグが多いため、大幅にカスタマイズする必要があります。

    2. コマンド補完が機能しない

    3. 端末上でカーソルを移動しているときに空白スペースが残ります

    4. Pythonは動作しません

    5. OpenSSHの新しいバージョンでは、改善されている可能性があります。さらにMSはhttps://developer.microsoft.com/en-us/microsoft-edge/tools/vms/からOpenSSHを利用可能にしているようですOptional Features


-1

OSXを使用している場合...

username @ local:/ file_directoryで実行しようとしたとき...

次のエラーが表示されました。

ssh: local: node name or service name not known

解決

私のMacでは、ローカルをセットアップするために次のことをしなければなりませんでしたssh

「システム環境設定」->「インターネットとネットワーク」->「共有」-> 「リモートログイン」を有効にする

これにより、username @ ipアドレスが提供されました。


-1

今日、MACで同じ問題が発生しました。

次のコマンドを入力します。

scp /local-file-path/ /-remote-location-path/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.