○ openssh-agent

・ssh接続で、ログインのたびにパスフレーズを入力しないですむ環境をつくる
・CentOSではX起動時にssh-agent環境を立ち上げる設定になっています
・クライアントのsshはrpmパッケージのopensshを使います
・"protocol2 PubkeyAuthentication"を使います
・鍵の作製は opensshクライアント を参照してください
・ログアウトするまでssh-agent環境が維持されるので注意

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○参照ファイル

:opensshマニュアル etc.
opensshクライアント

○仮設定

:ローカルホスト  mars.528p.com
:ユーザ sola
:サーバ venus.528p.com
:ユーザ sola
:サーバ earth.528p.com
:ユーザ sola

○ssh-agentの設定

・CentOSではXの起動セッションでssh-agentの環境変数を設定するように試みられます
・ssh-addコマンドで秘密鍵をエージェントに登録するだけですみます
・ここではCUI(コンソール環境)と共存させるため、コメント行にします

:/etc/X11/xinit/xinitrc-common

・省略

# Prefix launch of session with ssh-agent if available and not already running.
#SSH_AGENT=
#if [ -x /usr/bin/ssh-agent -a -z "$SSH_AGENT_PID" ]; then
#    if [ "x$TMPDIR" != "x" ]; then
#        SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR"
#    else
#        SSH_AGENT="/usr/bin/ssh-agent"
#  fi
#fi

・省略

:/home/sola/.bashrc

・.bashrcから読みこんでログイン時にssh-agentを起動させます
・CentOSでは .bash_profile で .bashrc を読みこむ設定になっています
・-s オプションは標準出力に Bourne shell を指定するためのものです

# .bashrc

# User specific aliases and functions

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

if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
    eval `ssh-agent -s`
fi

・再ログイン後、変数が設定されているか確認

[sola@mars:~]
$ echo $SSH_AGENT_PID
4138
$ echo $SSH_AUTH_SOCK
/tmp/ssh-bWPqTA4137/agent.4137

・秘密鍵を最初に登録しておけば2回目以降はパスフレーズを入力しないですみます
・スクリプトで秘密鍵の登録とsshコマンド入力の簡素化をします
・ssh-addは、~/.ssh/{id_rsa,id_dsa,identity}のどれかを読み込みます
・サーバ上でのコマンドの実行 (-tオプション)、sshログインを組みこんでいます
・その都度、秘密鍵を削除するなら"ssh-add -d"を有効にします

:/home/sola/bin/ssh-connect.sh (sola sola 700)

#!/bin/bash

if ! ssh-add -l > /dev/null 2>&1; then
 ssh-add
fi

HOST=`basename $0`
DOMAIN=`hostname -d`

case $1 in
    root)
        case $2 in
            -s)
                sftp -o Protocol=2 root\@$HOST.$DOMAIN ;;
            -t)
                shift
                shift
                ssh -2 -t root\@$HOST.$DOMAIN $* ;;
             *)
                shift
                ssh -2 root\@$HOST.$DOMAIN $* ;;
        esac ;;
    -s)
        sftp -o Protocol=2 $USER\@$HOST.$DOMAIN ;;
    *)
        ssh -2 $USER\@$HOST.$DOMAIN $* ;;
esac

#ssh-add -d

exit

○使い方

○/home/sola/binにパスを通します

:/home/sola/.bash_profile

・省略

PATH=$PATH:$HOME/bin

○/home/sola/binディレクトリにhost名のリンクをつくります

$ cd bin
[sola@mars:~/bin]
$ ln -s ssh-connect.sh venus
$ ln -s ssh-connect.sh earth

○host名にスクリプト引数を指定して実行します

・Ctrl+Cキーの必要なコマンドをroot権限で実行します

$ cd ~
[sola@mars:~]
$ venus root -t top

・一般コマンドをroot権限で実行します

$ venus root ls -a

・rootでログインします

$ venus root

・rootでsftpで接続します

$ venus root -s

・一般ユーザでログインします

$ venus

・一般ユーザでsftpで接続します

$ venus -s

○サーバ間の移動

・各サーバの/etc/ssh/ssh_configを修正します
・出発点のクライアントのssh_configも修正します

ForwardAgent yes

・サーバ間で移動してみる (各サーバは同じ公開鍵を使用)
・venusにはスクリプトがないのでsshコマンドを実行

[sola@mars:~]
$ venus
[sola@venus:~]
$ ssh earth
[sola@earth:~]
$

○ Copyright(c) 528p.com All Rights Reserved.