LoginSignup
3
5

More than 5 years have passed since last update.

expect を使って ssh-add のパス入力を省きログイン時に自動実行

Last updated at Posted at 2016-04-22

こちらの記事を参考にしました。

作業環境は MacOSX El Captain です。

自分の場合、登録したい鍵がいくつかあったので、シェル関数化して Bash スクリプト経由で ssh-add するようにしました。
また、鍵ファイルの PATH とパスフレーズは ~/.ssh/mysecrets.txt というファイルに書いておくようにしました。

# ~/.ssh/mysecrets.txt
秘密鍵1のPATH  パスワード1
秘密鍵2のPATH  パスワード2
:

※秘密鍵のPATH は ~/.ssh からの相対PATHとしました。

Bash スクリプトは下のようなもの。

#!/usr/bin/env bash

set -e

ssh-add-expect() {
  target=$1
  pass=$2
  cat <<-EOEXP | expect -
    set timeout 3
    spawn ssh-add $HOME/.ssh/$target
    expect {
      "Enter passphrase for" {
        send "$pass\r"
      }
    }
    expect {
      "denied" { exit 1 }
      eof { exit 0 }
    }
EOEXP
}

cat ~/.ssh/mysecrets.txt | while read secret; do
  ssh-add-expect $secret
done

これを例えば ssh-init.bash として、 ~/.bash_profile の最後に下のように書いておくと、初回ログイン時に実行してくれます。

if ! ssh-add -l >/dev/null; then
  /path/to/your-script/ssh-init.bash
fi

ssh-add -l は登録されている鍵がない場合、 $?1 になったので、if 節でこれを利用しました。

これまで毎回ログイン時にパス入力していましたが、これで楽になりました。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5