よくわからないうちに解決したとの事ですが、少しでも有意義な内容にする為に原因の推測および対処方法を書きます。
送れない原因
いきなりこうなったのです。そのときに送ったファイルは~/.bashrc
だったのですが、これが原因でしょうか?
~/.bashrc を送った後に起きるようになったのならば、おそらくそれが原因ですね。
scp コマンドでリモートホストとの間でファイルをコピーする場合、scp は内部で ssh コマンドを使ってリモートホスト側でも scp コマンドを起動し、その scp コマンドと対話する事でファイルのやりとりを行います。
リモートホストでのログインシェルが bash の場合、scp コマンドも bash を使って起動されますが、scp コマンドの起動の前に ~/.bashrc の内容も実行されます。
この時 ~/.bashrc の中に何かを表示するようなコマンドが有った場合、その出力を scp コマンドが受け取りますが、scp コマンドの出力では無い為正しく解釈できず、エラーとなって scp が行えなくなります。
この時 scp が正しく解釈できなかった内容は端末上に表示されます。
scp が行えるようにするには、この何らかのメッセージをどのコマンドが出しているかを突き止めて、対処してあげる必要があります。
調査方法1: 正しいメッセージの表示
と言われ、ファイルは送られていませんでした。
これは前述の ~/.bashrc の中で出力された内容だと思われますが、おそらくローカルとリモートで文字コード(漢字コード)が違っていて正しく表示出来ない状態だと思います。
この出力が正しく表示できればどのコマンドが出力しているかの大きな手がかりになります。
文字コードの判別、変換にはnkfが便利なのでインストールしましょう。
インストールしたら、まずローカル側でどの文字コードを使っているかを確認する為、以下のコマンドを実行します。
これの結果が ja_JP.UTF-8 ならば -w, ja_JP.eucJP ならば -e, ja_JP.SJIS ならば -s が nkf に渡すオプションになります。
nkf に渡すオプションがわかったら、メッセージを実際に変換してみます。
bash
1scp -i ~/.ssh/秘密鍵 送りたいファイル ユーザー名@ホスト名:届け先 2>&1 | nkf -w (UTF-8の場合)
これでメッセージが正しく表示されたら、その内容からメッセージを表示しているコマンドを特定してコメントアウトするなりの対処を行います。
調査方法2: bash のトレースオプションの利用
前述の方法でわからない場合、または nkf をインストールしたくないなどの理由で実行しなかたった場合は、bash のトレースオプションを利用する方法があります。
例として、以下の内容の ~/.bashrc で、echo コマンドが hogefuga を出力しているのを突き止めます。
bash
1HISTFILE=.bash_history
2[[ $PS1 && -f /usr/local/share/bash-completion/bash_completion.sh ]] && \
3 source /usr/local/share/bash-completion/bash_completion.sh
4
5echo hogehoge
6sleep 1
まず ~/.bashrc の先頭に以下の2行を追加します。(調査が終わったら削除してください)
この状態で、何も実行しないコマンド : を ssh 経由で実行します。
bash
1ssh -i ~/.ssh/秘密鍵 ユーザー名@ホスト名 :
2+ HISTFILE=.bash_history
3+ [[ -n '' ]]
4+ echo hogehoge
5hogehoge
6+ sleep 1
7+ :
set -x を実行した事によって、各コマンドを実行する前に実行するコマンドの内容が頭に + を付けて表示されるようになっています。
上記の例では hogefuga を出力しているのは直前の echo コマンドだという事がわかります。
余計な出力を行っているコマンドがわかったら、そのコマンドをコメントアウトして出力が出ないようにすれば scp が使えるようになるはずです。
原因がわかったら、追加した2行を削除してください。追加した2行の出力も scp が動かなくなる原因になります。