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