2012-02-29 15:44:22 +0000 2012-02-29 15:44:22 +0000
60
60

scp は動かないが ssh は動く

scp経由でサーバーに何かを送りたい場合。

$ scp file server:
                   __________  _____
$

と、3行表示されてファイルがコピーされません。しかし、私は問題なくssh経由でサーバに接続することができます:

$ ssh server

scpを動作させるにはどうしたらいいですか?

Antworten (6)

72
72
72
2012-03-04 02:57:22 +0000

このタイプの動作の原因として考えられるのは、サーバ上でのログイン処理中に ***** メッセージが表示されることです。Scp は ssh に依存して、クライアントとサーバ間で完全に透過的な暗号化トンネルを提供しています。

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

scp は、ssh を使ってトンネルをセットアップし、そのトンネル上でファイルを転送します。これは、tar と ssh を使用して、以下のコマンドでディレクトリ構造をコピーし、所有権と作成時間を保持していることを示しています。

tar czf - ./* | ssh jf@otherserver.com tar xzf - -C ~/saved_tree

を使ってファイルを転送し、

ssh jf@otherserver.com "tar czf - ~/saved_tree" | tar xzvf - -C ./

を使ってファイルを取り戻します。

61
61
61
2014-06-03 18:20:48 +0000

ターゲットユーザーの .bashrc または同等のファイルを確認してください。~/.bashrc は非インタラクティブなログイン用に作成されています。何かを出力するエコーやコマンドがあると、SCPプロトコルが壊れてしまいます。

15
15
15
2012-02-29 17:21:01 +0000

編集: scp コマンドに有効なパスを入力していますか?例えば:

scp test.txt username@remoteserver.com

は失敗します (実際には、あなたが見ているようなコマンドを出力するだけです)。この場合、リモートサーバへの有効なパスを指定する必要があります。

ファイルの送信。

scp /path/to/local/file yourremoteusername@servername.com:/path/to/remote/directory

ファイルの取得。

scp yourremoteusername@servername.com:/path/to/remote/file /path/to/local/directory

例。

scp ~/Desktop/myfile.txt john_doe@10.1.1.10:~/

scp test.txt username@remoteserver.com:~/ はホームディレクトリのショートカットです。

scp ~/Documents/working/index.html john_doe@johndoe.com:/var/www/index.html

この例では、ユーザー john_doe はリモートの /var/www ディレクトリへの書き込み権限が必要です。

5
5
5
2018-12-02 14:21:35 +0000

いくつかのホストでは、scp のような非インタラクティブなログインのために .bash_profile を誤ってソースにしてしまうことがあります。ターミナルに出力されるメッセージが scp を正しく機能させない原因になる可能性があります。.bash_profile にメッセージがある場合、これが原因である可能性があります。

ログインメッセージやバナーなどをインタラクティブログインでも表示させ、非インタラクティブログインでもscpを使用できるようにするには、.bash_profileファイルに印刷されるメッセージの前に以下を追加してください。

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

[-z "$PS1"] && return

代替コードは以下の通りです。

[[$- == *i*]] || return

もう一つの代替コードは以下の通りです。

case $- in
    *i*) ;;
      *) return;;
esac

は、最初の代替コードの長いバージョンだと思います。いくつかのホストでは、最初のコードでは正しく動作しないが、2つ目のコードでは動作することがわかりました。

非インタラクティブな scp ログインの間は .bash_profile の実行を中止して scp を動作させますが、ssh 経由でログインするとログインメッセージを表示します。

注意:これは、.bashrc ファイルを .bash_profile ($PATH の場合) からソースを取得している場合には、0x6& ファイルにも使用できます。

0
0
0
2018-10-14 14:34:43 +0000

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

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

0
0
0
2018-10-02 14:01:50 +0000

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

scp が ssh からのメッセージのためにハングアップする場合は、それらを抑制するのに役立つかもしれません。

scp -o "StrictHostKeyChecking no"

および / または

scp -B

** scp man から:**

-B バッチモードを選択します (パスワードやパスフレーズを聞かれないようにします)。

-o ssh_option オプションを ssh に渡すために使用できます。以下に列挙されているオプションの完全な詳細と、それらの可能な値については、 ssh_config(5) を参照してください。

私の場合は、これで解決したように見えましたが、全ての問題を解決することはできませんでした。リモートからリモートへの転送時に scp がハングする理由がわかりませんでした。ファイルの途中でハングしました。9回はうまくいきましたが、10回目はうまくいきませんでした。VPN 接続が一瞬トラフィックが急増し、その後 scp が回復しないときにハングアップするのではないかと考えました。実際にはずっとハングアップしていて、エラーメッセージすら表示されませんでした。

しかし、私はあきらめて sftp に切り替えました。これはリモートホスト間の直接接続を使用するので、合理的に高速です。ただし、スクリプトを実行しているマシンの ~/.shh/config ファイルで

Host example.com
    AgentForward yes

を有効にする必要があります。もちろん、これはリモートマシンが両方とも信頼できるネットワーク内にある場合のみの解決策です。