このエントリーをはてなブックマークに追加


scpができなくなった時の対処法・bashrc編

scpコマンドでファイルを他のサーバにコピーしようとしたとき、パスワードの問い合わせがあるのに、scpによるファイル転送がされない場合、コピー対象となるサーバーの.bashrcを変更・追記しませんでしたか!?
.bashrcに追記した内容・コマンドによっては、scpができなくなります。
以下、当方がscpコマンドができなくなった時の原因と対応を以下に記します。
使用したOSはCentOSになります。


scpができなくなった時の原因

当方がscpできなくなった時の現象と原因を以下に記します。

  • 192.168.56.6にファイルを転送しようとすると以下のように表示され転送されない。
    [sakura@centos6 ~]$ scp tokyo.dat 192.168.56.6:~/.
    sakura@192.168.56.6's password:
    2012年  9月  3日 月曜日 23:00:58 JST
    [sakura@centos6 ~]$ echo $?
    1
    scpのファイル転送出力がされず、$?が1となっている
  • scpコマンドに-vオプションをつけて動作を確認したが、はっきりした原因がわからず。
  • scpをした時に日付が表示されるので、転送先マシン(本資料では、192.168.56.6)の.bashrcファイルを確認してみると、dateコマンドを実行していた。
    $ cat .bashrc
    # .bashrc
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi
    
    # User specific aliases and functions
    date
    dateコマンドが原因でscpが意図した動作にならなかった。(dateコマンドを削除すればscpコマンドが意図した動作になる。)
  • 以下、dateコマンドを転送先マシンの.bashrcから削除し再度、転送元マシンからscpコマンドを実行した出力結果です。
    ファイルが転送されているのが確認できます。
    [sakura@centos6 ~]$ scp tokyo.dat 192.168.56.6:~/.
    sakura@192.168.56.6's password:
    tokyo.dat                                     100%    6     0.0KB/s   00:00
    [sakura@centos6 ~]$ echo $?
    0
    echoコマンドなどによる、出力があるコマンドを利用した場合も同様にscpコマンドが意図した動作になりません。

解決方法

以下に解決方法を3つ記述します。

  1. .bashrcの出力があるコマンドを記述しない。(または出力させない。)
  2. .bash_profileに記述する。
    .bashrcと.bash_profileの違いは以下の資料を参考にしてください。
  3. bashシェルの場合、SSH_TTY環境変数を利用する
    以下、SSH_CLIENT環境変数を利用した場合の例を記述します。

SSH_TTYを使用した例

.bashrcで何らかの処理をしたい時、以下のように記述することによりsshとscpの動作を一応別々に記述することができます。
SSH_TTYは、コマンドに割り当てれている端末がセットされます。つまり、端末を持たない場合は何もセットされないことを利用し判別しています。

[sakura@centos6 ~]$ cat .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
if [ "$SSH_TTY" != "" ]; then
  date
fi
  • 実行結果 一応、意図した動作になります。
    [sakura@centos ~]$ scp abc.txt 192.168.56.6:
    sakura@192.168.56.6's password:
    abc.txt                                       100%    8     0.0KB/s   00:00
    [sakura@centos ~]$ ssh 192.168.56.6
    sakura@192.168.56.6's password:
    Last login: Mon Sep  3 23:45:58 2012 from 192.168.56.5
    2012年  9月  3日 月曜日 23:52:44 JST
  • man sshのSSH_TTYの抜粋です。
        SSH_TTY               This is set to the name of the tty (path to the
                              device) associated with the current shell or com-
                              mand.  If the current session has no tty, this
                              variable is not set.

SSH_TTYの環境変数を利用し一応sshとscpを切り分ける記事でした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:29:53