web-dev-qa-db-ja.com

scpは動作しませんがsshは動作します

私がサーバーにscpで何かを送りたいと思うなら:

$ scp file server:
                   _____  _____  _____
$

その後、3行が印刷され、ファイルはコピーされません。しかし、私は問題なくssh経由でサーバーに接続できます。

$ ssh server

Scpを機能させる方法は?

49
scdmb

この種の動作の考えられる原因の1つは、サーバーでのログインプロセス中にanyメッセージが出力されることです。 Scpは、sshに依存して、クライアントとサーバー間に完全に透過的な暗号化トンネルを提供します。

サーバー上のすべてのログインスクリプトを確認し、別のユーザーを使用してみてください。エラーの原因を特定するもう1つの方法は、コマンドで-vを使用してトランザクションの進行状況を追跡し、失敗した場所を確認することです。必要に応じて、冗長性を増すために-vvvまで使用できます。 InChargeOfITの投稿にリストされているように、scpのさまざまな形式をチェックすることも有益です。

フードの下にあるscpは、sshを使ってトンネルを設定し、遠端でsshコマンドを使ってそのトンネルを介してファイルを転送します。これは、次のコマンドを使用して、所有権と作成時間を保持しながらディレクトリ構造をコピーするためにtarとsshを使用することによって示されます。

  tar czf - ./* | ssh [email protected] tar xzf - -C ~/saved_tree

それを送るために

ssh [email protected] "tar czf - ~/saved_tree" | tar xzvf - -C ./

取り戻すために。

64
faitjx

ターゲットユーザーの.bashrcまたは同等のファイルを確認してください。 〜/ .bashrcは非対話型ログイン用に提供されています。何かを出力するエコーやコマンドがあると、SCPプロトコルが破壊されます。

53
spoulson

編集:あなたはあなたがscpコマンドで有効なパスに入力していることを肯定的ですか?例えば:

scp test.txt [email protected]

失敗します(実際には、見ているとおりにコマンドが表示されるだけです)。この場合は、リモートサーバーへの有効なパスを指定する必要があります。例:scp test.txt [email protected]:~/

使用例

ファイルを送る:

scp /path/to/local/file [email protected]:/path/to/remote/directory

ファイルを入手する:

scp [email protected]:/path/to/remote/file /path/to/local/directory

例:

デスクトップからリモートサーバーのホームフォルダにファイルを送信します。

scp ~/Desktop/myfile.txt [email protected]:~/

~はあなたのホームディレクトリへのショートカットであることを忘れないでください。例えば/ home /

ファイルをWebルートに送信します。

scp ~/Documents/working/index.html [email protected]:/var/www/index.html

この例では、ユーザーjohn_doeはリモートの/ var/wwwディレクトリに対する書き込み権限を必要とします。

13
InChargeOfIT

一部のホストでは、scpのような非対話型ログイン用に間違って.bash_profileを提供しています。メッセージが端末に表示されると、scpが正しく機能しなくなる可能性があります。 .bash_profileにメッセージがある場合は、これが原因になっている可能性があります。

ログインメッセージ、バナーなどを対話型ログインで表示し、非対話型ログインでscpを使用できるようにするには、.bash_profileファイルに出力されるメッセージの前に以下を追加します。

# ********** If not running interactively, don't do anything more! ***********

[ -z "$PS1" ] && return

非対話的なscpログインの間、それは.bash_profileのさらなる実行を中止し、scpが機能することを可能にします、しかしあなたがsshを通してログインするときあなたのログインメッセージを表示するでしょう。

注:これを.bashrc($ PATH用)から読み込む場合は、.bash_profileファイルでも使用できます。対話型ログイン.

1
frederickjh

これは直接質問に答えるものではありませんが、2人のリモートホスト間でファイルを転送するときに凍結するscpの解決策を探している私のような人々には役に立つかもしれません。

Sshからのメッセージが原因でscpがハングアップした場合、それらを無効にするのに役立つ可能性があります。

scp -o "StrictHostKeyChecking no"

および/または

scp -B

scp manから:

- Bバッチモードを選択します(パスワードまたはパスフレーズの入力を防ぎます)。

- ossh_optionここで使用されている形式でsshにオプションを渡すことができます。scpコマンドラインフラグは別にありません。以下にリストされているオプションの完全な詳細とそれらの可能な値については、ssh_config(5)を参照してください。

私の場合、それは助けになるように見えたが、問題全体を解決しなかった。リモートからリモートに転送するときにscpがハングする理由を見つけることができませんでした。ファイルの途中でハングしました。それが働いた9回、試み番号10はしませんでした。 VPN接続が一時的にトラフィックが急増してscpが回復しなくなるとハングする可能性があると考えられます。それは本当に永遠にハングし、エラーメッセージを出すことすらありません。

しかし、私はあきらめてsftpに切り替えました。リモートホスト間の直接接続を使用するため、これはかなり高速です。有効にする必要があります

Host example.com
    AgentForward yes

スクリプトを実行しているマシンの〜/ .shh/configファイルにあります。もちろんこれは、リモートマシンが両方とも信頼できるネットワーク内にある場合の解決策にすぎません。

0
anarchist912

exec /bin/bash.cshrcを呼び出していました。

これを削除することで問題は解決しました。

0
dips