私がサーバーにscpで何かを送りたいと思うなら:
$ scp file server:
_____ _____ _____
$
その後、3行が印刷され、ファイルはコピーされません。しかし、私は問題なくssh経由でサーバーに接続できます。
$ ssh server
Scpを機能させる方法は?
この種の動作の考えられる原因の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 ./
取り戻すために。
ターゲットユーザーの.bashrcまたは同等のファイルを確認してください。 〜/ .bashrcは非対話型ログイン用に提供されています。何かを出力するエコーやコマンドがあると、SCPプロトコルが破壊されます。
編集:あなたはあなたが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ディレクトリに対する書き込み権限を必要とします。
一部のホストでは、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
ファイルでも使用できます。対話型ログイン.
これは直接質問に答えるものではありませんが、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ファイルにあります。もちろんこれは、リモートマシンが両方とも信頼できるネットワーク内にある場合の解決策にすぎません。
exec /bin/bash
で.cshrc
を呼び出していました。
これを削除することで問題は解決しました。