CygwinからSSHログインするためのシェル

カテゴリ: コンピュータ / 公開日: 2010年6月01日(火曜)03:07 / 投稿者: Tom Goodsun

あまりよろしくないことだが、Cygwinを使ってログインを省略するためのシェルを作ってみた。

具体的にはputclipというCygwinに用意されたクリップボードへコピーするための仕組みを使う。これでパスワードをクリップボードにコピーしといて、sloginコマンドを実行させておいて、パスワードを聞かれたらCtrl+Insertで貼り付けでログイン。パスワードをクリップボードに記憶してしまうので、セキュリティは低い。

Cygwinのhomeディレクトリにremoteというディレクトリを作ってみた。そこにconnect.shを作成した。内容は以下の通り。作成後はパーミッションに気をつけること!

#!/bin/bash

cd `dirname $0`

SERVER=$1
ACCOUNT_SET=$2
ACCOUNT_SET_LIST=./.account_list

while read i;
do
        FIELD1=`echo $i | cut -f1 -d' '`
        if test "$FIELD1" = "$ACCOUNT_SET"
        then
                USERNAME=`echo $i | cut -f2 -d' '`
                PASSWORD=`echo $i | cut -f3 -d' '`
                PORT=`echo $i | cut -f4 -d' '`
                break
        fi     
done < $ACCOUNT_SET_LIST

if test "$PORT" = ""
then
        PORT=22
fi

echo $PASSWORD | putclip
slogin -p $PORT $USERNAME@$SERVER

7行目の.account_listというファイルを作る。これはアカウントセット(名前)、ユーザー名、パスワード、ポート番号をスペース区切りで記述したテキストファイル。たとえばこんな感じ。

websvr1 webmaster webmaster_password 22
websvr2 webmaster 123456
dbsvr1 dbmaster abcdefg 1022

で実際はそれぞれのサーバー用のシェルを作成する。たとえば以下の内容のファイルをwebsvr1という名前で作っておく。作成後はパーミッションに気をつけておくこと!

cd `dirname $0`
./connect.sh websvr.yourdomain.com websvr2

ログインの際はこのシェルをたたくと、.account_listからアカウントセットを拾ってきて、sloginコマンドを作ってパスワードをクリップボードにコピーする。

だから使い方はこんな感じ。

# ./remote/websvr1

かなり説明を省略しているので、スクリプトはがんばって読んでね。