#navi(../)
* scpができなくなった時の対処法・bashrc編 [#d1b1e007]
scpコマンドでファイルを他のサーバにコピーしようとしたとき、パスワードの問い合わせがあるのに、scpによるファイル転送がされない場合、コピー対象となるサーバーの.bashrcを変更・追記しませんでしたか!?~
.bashrcに追記した内容・コマンドによっては、scpができなくなります。~
以下、当方がscpコマンドができなくなった時の原因と対応を以下に記します。~
使用したOSはCentOSになります。
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* scpができなくなった時の原因 [#a3203625]
当方が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コマンドが意図した動作になりません。
* 解決方法 [#hfff275f]
以下に解決方法を3つ記述します。
+ .bashrcの出力があるコマンドを記述しない。(または出力させない。)
+ .bash_profileに記述する。~
.bashrcと.bash_profileの違いは以下の資料を参考にしてください。
--[[.bashrcと.bash_profileの違い>Linux環境設定/.bashrcと.bash_profileの違い]]
+ bashシェルの場合、SSH_TTY環境変数を利用する~
以下、SSH_CLIENT環境変数を利用した場合の例を記述します。
** SSH_TTYを使用した例 [#gbc1b467]
.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を切り分ける記事でした。
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)