scp は動かないが ssh は動く

scp ssh

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

$ scp file server:
_____  _____  _____
$

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

$ ssh server

scpを動作させるには?

  70  scdmb  2012-02-29


ベストアンサー

このタイプの動作の原因として考えられるのは、サーバ上でのログイン処理中にメッセージが印刷されてしまうことです。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 ./

取り戻すために

84  faitjx  2012-03-04


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

65  spoulson  2014-06-03


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

scp test.txt username@remoteserver.com

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

Example usages:

ファイルを送信します

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

ファイルを取得します

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

Examples:

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

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

~はホームディレクトリのショートカットであることを覚えておいてください

ウェブルートにファイルを送信します

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

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

19  InChargeOfIT  2012-02-29


いくつかのホストでは、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 の場合) からソースを取っている場合は、.bashrc ファイルの中でも使用できます

8  frederickjh  2018-12-02


exec /bin/bash.cshrcで呼んでいました

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

1  dips  2018-10-14


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

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

scp -o "StrictHostKeyChecking no"

と/または

scp -B

スコップの人から

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

-o ssh_option scp コマンドラインフラグがない場合に使用する形式で ssh にオプションを渡すために使用できます。以下に列挙されているオプションとその値の詳細については、 ssh_config(5) を参照してください

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

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

Host example.com
AgentForward yes

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

0  anarchist912  2018-10-02


ssh/scp のトラブルシューティングを行う場合は、冗長出力用に -v オプションを追加するのが良いでしょう。また、リモートサーバのユーザを特定したい場合もあるでしょう。最後に、ファイルを /tmp のような一時的な場所にコピーして、書き込み権限があることを確認しておくと便利な場合があります。例えば、hello world ファイルを verbose on の状態でリモートサーバに送信するには、以下のような構文になります

scp -v hello_world.txt username@server-uri:/tmp

ユーザー名をそのシステム上に存在するユーザーに置き換え、もちろんサーバーのURIを実際のサーバーのFQDNまたはIPアドレスに置き換えてください

0  Michael Behrens  2020-07-16


タイトルとURLをコピーしました