概要
SSH接続しているLinuxクライアントから別のLinuxサーバにSSHログインする際の効率化を図るスクリプトです。
通常のコマンドを用いた秘密鍵を用いたアクセス
ssh -i /path/to/private_key username@server_host
と、-i
の後に秘密鍵を指定し、ユーザ名@サーバ名/IPアドレスを入力するのはちょっと面倒なので、コマンド一発で接続できるようにします。
前提
- Linuxサーバの秘密鍵を有していること。
- 秘密鍵に適切なパスワードがかけられていること。
スクリプト
- ssh_server.sh
server
の部分を任意のホスト名にすると便利です
#!/bin/bash
# 変数定義
## 接続先のサーバ名/IPアドレス
server_host="your_server_host"
## 接続先でログインするアカウント名
username="your_username"
## 秘密鍵のファイルパスを絶対パスで表記
private_key_path="/path/to/private_key"
## 接続時間を記録するログのディレクトリパスを絶対パスで表記
log_directory="/path/to/logs"
# ログディレクトリが存在しない場合は作成する
if [ ! -d "$log_directory" ]; then
mkdir -p "$log_directory"
fi
# 現在の日付と時刻を取得
current_datetime=$(date +"%Y%m%d%H%M")
# ログファイルのパス
log_file="$log_directory/$server_host$current_datetime.log"
# 秘密鍵の存在チェック
if [ ! -f "$private_key_path" ]; then
echo "$(date): Error - 秘密鍵ファイルが見つかりません: $private_key_path" >> "$log_file"
exit 1
fi
# 秘密鍵のパーミッションが600であるかのチェック
if [ $(stat -c %a "$private_key_path") -ne 600 ]; then
echo "$(date): Error - 秘密鍵のパーミッションが正しくありません (600 である必要があります): $private_key_path" >> "$log_file"
exit 1
fi
# SSH接続
echo "$(date): SSH接続を試行します: ssh -i $private_key_path $username@$server_host" >> "$log_file"
ssh -i "$private_key_path" "$username@$server_host"
echo "$(date): SSH接続が正常に終了しました" >> "$log_file"
- 実行権付与
chmod +x ssh_server.sh
動き
./ssh_server.sh
を実行後、秘密鍵のパスワード入力画面が出てきます。認証後、接続先のプロンプトが返ってくれば成功です。