scp は動かないが ssh は動く
scp経由でサーバーに何かを送りたい場合。
$ scp file server:
__________ _____
$
と、3行表示されてファイルがコピーされません。しかし、私は問題なくssh経由でサーバに接続することができます:
$ ssh server
scpを動作させるにはどうしたらいいですか?
scp経由でサーバーに何かを送りたい場合。
$ scp file server:
__________ _____
$
と、3行表示されてファイルがコピーされません。しかし、私は問題なくssh経由でサーバに接続することができます:
$ ssh server
scpを動作させるにはどうしたらいいですか?
このタイプの動作の原因として考えられるのは、サーバ上でのログイン処理中に ***** メッセージが表示されることです。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 ./
を使ってファイルを取り戻します。
編集: 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 ディレクトリへの書き込み権限が必要です。
いくつかのホストでは、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& ファイルにも使用できます。
これは直接の答えではありませんが、私のように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
を有効にする必要があります。もちろん、これはリモートマシンが両方とも信頼できるネットワーク内にある場合のみの解決策です。