scpは機能しませんが、sshは機能します


56

scpを介してサーバーに何かを送信する場合:

$ scp file server:
                   _____  _____  _____
$

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

$ ssh server

scpを機能させる方法は?


などのオペレーティング・システム、SSHの設定ファイル、としてより多くの情報を提供
qroberts

そして、印刷されるこれらの3行は何ですか?
jjlin

通常の場合、scp file server:(「server」が有効なホスト名であると仮定して)実行すると、ファイルはアカウントディレクトリにコピーされます。
dan_linder

3
「scp -v file server:」の実行時に出力を提供できますか。
dan_linder

scpサーバー上の別の場所を試してから、cpまたはmvその後ssh
Jesse W. Collins

回答:


68

この種の動作の1つの原因が持っているすべてのメッセージは、サーバー上のログインプロセス中にプリントアウト。Scpは、クライアントとサーバー間に完全に透過的な暗号化トンネルを提供するためにsshに依存しています。

サーバー上のすべてのログインスクリプトを確認し、別のユーザーを使用してみてください。エラーの原因を特定する別の方法は、コマンドで-vを使用して、トランザクションの進行状況をトレースし、どこで失敗したかを確認することです。必要に応じて、-vvvまでを使用して詳細度を上げることができます。InChargeOfITによる投稿にリストされているように、さまざまな形式のscpを確認することも有益です。

ボンネットの下のscpは、sshを使用してトンネルを設定し、そのトンネルを介してファイルを転送します。遠端で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 ./

それを取り戻すために。


それは本当に役立つ
メイプル

.bashrc内でscpを検出することは可能ですか?シェルがscpでない場合にのみ出力をチェックして印刷できるようにするには?
アレクサンドロス

また、ユーザーは特権レベル15である必要があります。ユーザーが特権レベル15でない場合、ASAは認証後に接続を閉じるだけで、特権の問題を示すエラーメッセージは表示されません。また、ユーザーがenableパスワードを入力して入力できるからといって、priv 15であるとは限りません。「privilege 15」がどこかに表示されshow run | inc USERNAMEない場合、scpを使用できません。
タイラーアベア

基本的に、リモートサーバー上の.bashrcから「zsh」を削除し、scpが機能し始めました。
オタク

また、でSHELL変数(たとえばexport SHELL=/bin/zsh)を変更すると壊れます~/.bashrc。これは時々使用されていませんchsh
-Suuuehgi

58

ターゲットユーザーの.bashrcまたは同等のファイルを確認します。〜/ .bashrcは、非対話型ログイン用です。何かを出力するエコーまたはコマンドがある場合、SCPプロトコルが壊れます。


10
ユーレカ!私は財産を持っていたので、これは私の問題でした| リモートの.bashrcでのログインごとのカウセイ。今完璧に動作します。
トーマスブラウン

3
あなたは、命の恩人です。:)
ガウラブマンチャンダ

4
まだ必要な場合はfortune | cowsay、.bash_profileに入れてください。これはインタラクティブのみのログイン用であり、SCPセッション中に提供されるべきではありません。
spoulson

私の問題は.bashrc、他のマシンには存在しない別のファイルをで取得していたことでした。この回答のロジックを使用して、~/.bashrc非インタラクティブなときにスキップできます(これはの場合ですscp)。
ウィズバッキー

15

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

scp test.txt username@remoteserver.com

失敗します(実際、見ているようにコマンドを出力するだけです)。この場合、リモートサーバーへの有効なパスを指定する必要があります。たとえば、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:~/

覚えておいてください~、あなたのホームディレクトリのショートカットです...例えば、/ホーム/

ファイルをwebrootに送信します。

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

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


2
あなたは質問に答えていません。OPで指定されたコマンドラインはかなり良いように見えますが、興味深い部分は------...です。あなたの例はどれもそれに関連していません。
アキラ

@akira多分、そうでないかもしれません。有効なパスを指定しないと、scpコマンドが失敗します。たとえば、scp somefile user@host.com:リモートディレクトリに適切なアクセス許可がないと、問題も発生します。私の答えを編集して少し
わかりやすくした-InChargeOfIT

1
あなたの例のいずれもが、あなたの例のいずれも、「サーバ側の権限の間違った」をカバーしていない「ファイルが存在しない」カバーしていない...
アキラ

4

一部のホストでは、.bash_profilescpなどの非対話型ログインのソースが誤っています。端末に出力されるメッセージは、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 から)ソースする場合、ファイルで使用することもできるため、非対話型ログイン中にその一部のみがソースされます。


おかげで作品の魅力のように........
somethingSomething

0

これは質問に直接答えるものではありませんが、2人のリモートホスト間でファイルを転送する際にフリーズscpを使用したソリューションを探している私のような人々にとって役立つかもしれません。

scpsshからのメッセージが原因でハングした場合、それらを抑制するのに役立ちます。

scp -o "StrictHostKeyChecking no"

および/または

scp -B

scpから:

-Bバッチモードを選択します(パスワードまたはパスフレーズの入力を防ぎます)。

-o ssh_optionを使用して、scpコマンドラインフラグが個別に存在しない形式でsshにオプションを渡すことができます。以下にリストされているオプションの完全な詳細、および可能な値については、ssh_config(5)を参照してください。

私の場合、それは助けに思えたが、問題全体を解決しなかった。リモートからリモートに転送するときにscpがハングする理由を見つけることができませんでした。ファイルの途中でハングしました。9回は動作しましたが、試行番号10は動作しませんでした。VPN接続が一瞬トラフィックスパイクを取得し、その後scpが回復しないとハングする可能性があると考えられます。それは本当に永遠にハングし、エラーメッセージさえ与えません。

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

Host example.com
    AgentForward yes

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


0

電話をしていexec /bin/bashました.cshrc

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.