メイン

Cygwin アーカイブ

2005年01月29日

cygwinのcronとrsyncの使い方

  1. cronの設定
    • PATH に設定をした場合は以下のコマンドを実行。
    • $ cygrunsrv -I cron -d "CYGWIN cron" -p /usr/sbin/cron -a -D -e "CYGWIN=ntsec nosmbntsec"
    • Windowsの「コントロールパネル」から「管理ツール」「サービス」を選んでください。
    • そのサービスの中にCygwin cron Cygwin sshがあればサービスに登録されています。
    • まずはサービス自体がうまく起動できないときで、一番ありがちなのはパーミッションの設定違い。
    • /var/cron /var/log のパーミッションとowner/groupを確認してください(その下のディレクトリも)。
    • /var は、以下のように設定するのが良いでしょう。
      • drwxrwxrwt+ 3 admin admins 0 Jan 24 22:05 cron/
      • drwxrwxr-x+ 2 admin admins 0 Jan 24 22:05 log/
      • drwxrwxr-x+ 2 admin admins 0 Jan 24 22:00 run/
    • 'ls -l' で表示される属性の一番右に "+" がついているのはowner / group / other の rwx で表示できる以外のアクセス権がいていることを示しています。これはNTFSのSYSTEMにアクセス権があるということを現しているようす。
  1. rsyncの設定
    • $ rsync -avz -e ssh --delete yuusaku@www.aubetec.com:public_html/ /cygdrive/d/backup/yuusaku/public_html/
    • これで、yuusaku(ログイン名)のホームディレクトリのpublic_html下の全てのファイル、ディレクトリをsshを使用してcygwinをインストールしてあるWindwosマシンのd:\backup/yuusaku/public_htmlコピーできます。
    • これをbackup.shなどのShellファイルにしてcronで実行すれば定期的にバックアップが取れることになります。
    • 2度目以降は同じファイル名でタイムスタンプが変わっていないファイルはバックアップしません。 また、--delete オプションをつけるとサーバで削除されたファイルは、バックアップ先のファイルも削除します。
    • これは注意が必要。テストでうっかり、自分のcygwinのホームディレクトリにバックアップをコピーしたら、.bashrc、.bash_profile .sshなど全て削除されてしまい、再度設定する羽目になりました。(;_;)
    • 自分が二つのIDを持っている場合、先の公開鍵をもう一つのIDのホームディレクトリのauthorized_keysに登録すれば、同時に2カ所のバックアップも取れます。
    • (例)
    • shellファイルbackup.shの内容
    • #!/bin/sh
    • $ rsync -avz -e ssh --delete yuusaku@www.aubetec.com:public_html/ /cygdrive/d/backup/yuusaku/public_html/
    • $ rsync -avz -e ssh --delete mitaka@www.ikkokukan.com:public_html/ /cygdrive/d/backup/mitaka/public_html/
    • このbackup.shをcronに登録すればOK
 

2005年02月02日

cygwinでopenssh

  1. cygwinのopensshの設定
  • opensshの設定
    • cygwinのホームアドレスで
    • /usr/bin/ssh-host-configを実行する。
   Generating public/private rsa key pair.
   Enter file in which to save the key (/home/t/.ssh/id_rsa): 
--最初に鍵を作るディレクトリと鍵の名前を聞いてくるがデフォルトのままで良い。

    • 違う鍵の名前にしたい場合はホームルートから入力する。
    • 途中で(yes/no)を聞いてくるが全てyesでよい。
  • 次に環境変数の設定を聞いてくるが、Windowsの環境変数で設定した値をいれる。
  Which value should the environment variable CYGWIN have when
  sshd starts? It's recommended to set at least "ntsec" to be
  able to change user context without password.
  Default is "ntsec". CYGWIN=ntsec binmode tty
    • 上記のように「ntsec binmode tty」をいれる。
  • sshサービスがインストールされているか確認
  $ cygrunsrv -Q sshd
    • このように表示されていればsshが停止したことになる。
  Service sshd exists
  Type : Own Process
  Current State : Stopped
  Controls Accepted :
  sshサービスを起動する
  $ cygrunsrv -S sshd

  • sshの鍵を作成する。
    • ssh1の鍵の作成
  $ ssh-keygen -t rsa1
    • 鍵をどこに作るか聞いてくるがデフォルトのままでよければENTER
    • 次にパスフレーズ(passphrase)を聞いてくるのでパスフレーズを入力する。
    • パスフレーズはパスワードと同じでなくても良い。
    • これでユーザーのホームディレクトリに.sshディレクトリができ、なかにidentityとidentity.pubの二つの鍵ができる。
    • ssh2の鍵の作成
  $ ssh-keygen -t rsa
    • ssh1と同様に.sshディレクトリにid_rsaとid_rsa.pubの二つの鍵ができる。
    • pubと付いたファイルが公開鍵で、これをログイン先のサーバの.sshディレクトリにフロッピーなどで入れる。
    • pubの付かないファイルが個人鍵になる。
    • # サーバ側で作られた個人鍵を貰っても良い。
  • ここからはサーバ側での作業
    • サーバ側のログインするユーザーのホームディレクトリで実行。
  $ cat ./.ssh/id_rsa.pub >> ./.ssh/authorized_keys

    • 「>>」はauthorized_keysというファイルに公開鍵を追加するという意味。
    • 「>」では上書きになるため、以前登録してある公開鍵を消してしまうので注意すること  
  $ chmod 664 ./.ssh/authorized_keys   # パーミッションを変更
  $ rm id_rsa.pub            # id_rsa.pubを削除
 

    • TERATERMPROのttshなどのようにsshのプロトコル1しかサポートしていないソフトを使用する場合はssh1で接続しなければならないので、同様にidentity.pubをauthorized_keysに追加すれば良い。
    • TERATERMPROは現在UNICODE、SS2対応のバージョン(http://sleep.mat-yan.jp/~yutaka/windows/index.html)がでているので、そちらのほうが幸せかも。
    • サーバ側での作業はこれで終わり   
  • これでsshでログインできるはず。
  • 試しに、sshでログインしてみる。
  • cygwinのコンソールから
      • $ ssh サーバー名
    • 入力するとパスフレーズを聞いてくるので、先ほどの鍵を作ったときのパスフレーズを入れるとログインできるはずです。
  • ssh-agentの設定
    • 毎回パスフレーズを聞かれるのは面倒なのでssh-agentの設定をする。
    • これは一番最初にcygwinを起動した時にパスフレーズを聞いてくるだけで、あとはマシンをリブートしないかぎり、パスフレーズの入力の必要がなくなるものです。
    • .bash_profileに次の設定を追加しておく。  
   echo -n "ssh-agent: "
   source ~/.ssh-agent-info
   ssh-add -l >&/dev/null
   if [ $? == 2 ] ; then
     echo -n "ssh-agent: restart...."
     ssh-agent >~/.ssh-agent-info
     source ~/.ssh-agent-info
   fi
   if ssh-add -l >&/dev/null ; then
      echo "ssh-agent: Identity is already stored."
      else
       ssh-add
   fi
    • これで一度ログアウトしてcygwinを再起動してみましょう。
    • 最初にパスフレーズを聞いてくるので入力します。
    • あとは何度ログアウトしてもパスフレーズを聞いてくることはありません。

cygwinのopensshのインストールの詳しい説明はhttp://www005.upp.so-net.ne.jp/keys/cvsnt/openssh/を参考にしてください。

cygwinのインストールと設定

cygwinのインストール

Setup.exeをcygwin.comからDownloadする。 Setupを起動して「次へ」をクリックする。

  • 1.Choose A Download Sourceが出てくるので、Install From Internetを選ぶ。
  • 2.Select Root Install Directoryでcygwinをインストールするディレクトリを指定   下のinstall ForはAllUsers、Default Text File TypeはUnixのデフォルトのまま。
  • 3.Select Local Package Directroyはインストールするためのテンポラリファイルをどこに置くか指定する。
  • 4.Select Your Internet ConnectiondではDirect Connectionを選択。  プロキシーサーバなどを使っているならUse HTTP/FTP Proxyでプロキシーサーバのホスト名とPort番号を入れる。
  • 5.Chose A Download Siteで近くのサイトを選ぶ。
  • 6.Select Packages デフォルトのままでもよいが、今回、rsyncをインストールしてLinuxサーバのバックアップを取るのが目的のため、以下を追加インストールする。
  • + admin
    • cygrunsrvがskipになっていたらクリック
    • cronがskipになっていたらクリック
  • +Editors
    • vim この中にviが入っている。
  • +Net
    • openssh。
      • 一緒にopensslもDownloadされるようになる。この中にscpコマンドも含まれる。
    • rsync
      • sshでbackupがとれる高機能なソフト

以上を選択して後は画面を進行しておけばよい。 ここではcygwinを起動しないこと。

環境設定

  • マシンがWindowsXPなので「コントロールパネル」の「システム」から「詳細設定」タブを選択。下に環境変数があるので選択
  • 1.ユーザ環境変数の設定
    • ****のユーザー環境変数
    • ここのユーザー名に注意すること。日本語名ではsshがうまく動作しない。
    • 新規をクリックし、以下の変数と値をセットする
    • 変数     値
    • HOME /home/**** <-****は自分のホームディレクトリ(cygwin/home/***に作られる。)
    • MAKE_MODE UNIX
    • SHELL /bin/bash
  • 2.システム環境変数
    • 編集でPathにc:\cygwin/bin;c:\cygwin\usr/local/bin;(c:\にcygwinをインストールした場合)を加える。
    • 新規で下記を追加する。
    • 変数     値
    • Cygwin   ntsec binmode tty

これでデスクトップにcygwinのアイコンがあるはずなので、cygwinを起動 DOS窓のような窓でcygwinが起動するはずです。

  • $ ls  とタイプ。$はプロンプト。lsはDOSのdirみたいなもの     ここではまだ何も表示されない筈。
  • $ ls -a とタイプ    .bashrcとかが表示されるはず。「.」が頭に付くのは隠しファイルや隠しディレクトリ

私の.bashrc


 if [ -f /etc/bashrc ]; then
  . /etc/bashrc
 fi 
 
 export SHELL=/bin/bash
 export TMPDIR=/tmp
 export TZ=JST-09
 export MAKE_MODE=unix
 
 PATH=./:/bin:/usr/bin:/usr/local/bin:~/bin:$PATH
 PAGER=less
 USERNAME="`id -un`"
 JLESSCHARSET=japanese-sjis
 
 PS1="$HOSTNAME:$USERNAME:\w$ "
 
 if [ ! -d "$HOME" ]; then
  mkdir -p "$HOME"
 fi
 
if [ -n ${DISPLAY} ]; then
 export DISPLAY=localhost:0.0
fi
 
if [ ! -n "${TERM}" ]; then
 TERM=cygwin
fi
 
if [ -z "$HOME" ]; then
 HOME="/home/$USER"
fi
   
export PATH HOME USER PAGER JLESSCHARSET
 
alias ls="ls -F --color=auto --show-control-chars"
alias la="ls -aF"
alias ll="ls -l"
alias rm="rm -i"
alias cp="cp -i"
alias mv="mv -i" 

上記の中のJLESSCHARSET=japanese-sjisとalias ls="ls -F --color=auto --show-control-chars"の--show-control-charsは日本語を表示するため。

Viなどのエディタになれていない場合は、Windowsのエディタで「LF」で保存できるTeraPadなどのエディタを使っても良い。Windowsのメモ帳などは使わないこと。

日本語を使うために

.inputrcに下記を追加する。

  set kanji-code sjis
  set convert-meta off
  set meta-flag on
 set output-meta on
  • viの日本語
  • .vimrcに下記を追加
  set encoding=japan

  • viに行を表示したい時
  set number

詳しくはhttp://www.mars.dti.ne.jp/~sohda/cygwin/setup.htmlを参考にしてください。

2005年06月29日

BATファイルからCygwinのシェルを動かす方法(ssh-agent対応)

cygwinにopenSSHを組み込み、cronを使い、rsyncでバックアップを取る方法を以前書きましたが、cronを使わずにWINDOWSでBATファイルから起動する方法です。

ssh-aentを使っている場合、単にBATファイルに
sh backup.sh
と書いただけでは別Shellで起動してしまう為、パスワードを新たに聞いてきます。
これではタスクに登録して時間がきたら自動に実行するわけには行きません。

次の様にBATファイルを書く必要があります。
backup.batからbackup.shを起動する場合。

(例)Backup.BAT
# ------------------ここから---------------------------
@echo off
C:
chdir C:\cygwin\bin  # これは実際のcygwinのbinディレクトリを書いてください。

bash --login -i -c "/cygdrive/c/cygwin/home/cyguser/backup.sh >> /cygdrive/d/backup/log.txt 2>> /cygdrive/d/backup/err.txt" # 一行で書いてください。
#--------------------ここまで---------------------------

/cygdrive/c/cygwin/home/cyguser/backup.shは実際のbackup.shのあるパス
>>/cygdrive/d/backup/log.txt 2>> /cygdrive/d/backup/err.txtはDドライブのbackupフォルダに結果レポートとエラーポートを書き出します。


2005年07月12日

cygwinのrsyncでサーバのディレクトリをバックアップする。

管理しているサーバのhtdocsフォルダをバックアップするシェルスクリプト
* 事前にloginするサーバに.sshフォルダを作り、公開鍵id_rsa.pubをアップし、authorized_keysを作る。詳しくは、こちらのcygwinでopensshをご覧下さい。
  一番最初だけ、sshのパスフレーズを聞いてくるので、入力してやる必要がある。
  また、sshの設定によってはパスフレーズだけでは駄目な場合があるので注意が必要。

shellスクリプト
---------------------------------------------------------------------
while read usrname usrurl usrdir srvdir
do
if [ -d $srvdir]
then
rsync -avz -e ssh --delete $usrname@$usrurl:$usrdir $srvdir
else
mkdir -m 755 -p $srvdir
rsync -avz -e ssh --delete $usrname@$usrurl:$usrdir $srvdir
fi
done < /cygdrive/c/cygwin/home/admin/bkup_server.txt
----------------------------------------------------------------------

shellスクリプトで読み込まれるテキスト(bkup_server.txt)
 (事前にEドライブにbackupフォルダを作っておく。)

ログイン名 IPaddress/URL BACKUPフォルダ バックアップ先フォルダ
--------------------------------------------------------------
user01   www.aaa.com   htdocs/    /cygdrive/e/backup/aaa/htdocs/
user02   www.bbb.com   htdocs/    /cygdrive/e/backup/bbb/htdocs/
user03   www.ccc.co.jp  htdocs/    /cygdrive/e/backup/ccc/htdocs/
user04   www.ddd.com   htdocs/   /cygdrive/e/backup/ddd/htdocs/
---------------------------------------------------------------
先ずuser01名でwww.aaa.comにログインし、htdocsフォルダ下のすべてのファイルをEドライブのbackupフォルダ下のaaaフォルダにバックアップする。aaaフォルダがない場合、自動的にaaaフォルダは作成される。
同様にuser02からuser04まで実行。

これを応用するとHDD同士のバックアップも簡単にできます。

ハードディスクのバックアップ用シェルスクリプト
--------------------------------------------------------
while read hdlandir srvdir
do
if [ -d $srvdir]
then
rsync -avz --delete $hdlandir $srvdir
else
mkdir -m 755 -p $srvdir
rsync -avz --delete $hdlandir $srvdir
fi
done < ./bk_hdlan.txt
------------------------------------------------------

bk_hdlan.txt
---------------------------------------
/cygdrive/d/ /cygdrive/f/
/cygdrive/e/ /cygdrive/g/
---------------------------------------

これらのシェルスクリプトをcronで実行するか、BATファイルを作りWindowsのタスクで実行時間を指定すれば、後は定時にバックアップをします。

あなたの地区のお天気


Add Clips(ブックマーク)

ブックマークに追加する

アーカイブ



WWW を検索
aubetec.com を検索

Live Search


動画検索 Fooooo