scpコマンドでファイルを他のサーバにコピーしようとしたとき、パスワードの問い合わせがあるのに、scpによるファイル転送がされない場合、コピー対象となるサーバーの.bashrcを変更・追記しませんでしたか!?
.bashrcに追記した内容・コマンドによっては、scpができなくなります。
以下、当方がscpコマンドができなくなった時の原因と対応を以下に記します。
使用したOSはCentOSになります。
当方がscpできなくなった時の現象と原因を以下に記します。
[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 $? 1scpのファイル転送出力がされず、$?が1となっている
$ cat .bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions datedateコマンドが原因でscpが意図した動作にならなかった。(dateコマンドを削除すれば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 $? 0echoコマンドなどによる、出力があるコマンドを利用した場合も同様にscpコマンドが意図した動作になりません。
以下に解決方法を3つ記述します。
.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
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を切り分ける記事でした。