概要
ssh-agent を使ってパスワードやパスフレーズの管理を行っている場合、マシンがリブートした場合や再ログインした場合は ssh-agent のセッションがなくなるため再度 ssh-add しなければなりません
本当はセキュリティのことも踏まえて毎回パスフレーズを入力するのが良いのですが面倒なので自動化する方法を紹介します
あまりよろしくはない方法なので自己責任でお願いします
環境
- Ubuntu 18.04
SSH_ASKPASS を使う
ssh-add をするときに環境変数 SSH_ASKPASS
を設定すれば勝手にそこからパスワードを拾って登録してくれるという機能です
SSH_ASKPASS
に実行可能なシェルスクリプトを設定すればその結果をパスワードとして使ってくれます
vim echo_pass.sh
#!/bin/sh
echo "xxxxxx"
chmod +x echo_pass.sh
xxxxxx の部分はパスワードを設定してください
あまりよろしくないという点はここでパスワードを平分で保存しているのでアンセキュアになるという点です
何かしらの方法で暗号化/復号化するような仕組みのシェルスクリプトになっていればある程度はセキュアになるかなと思います
今回はテストなので平文で進めます
SSH_ASKPASS + ssh-add で自動登録するコマンド
以下のような感じで使います
実際叩いてみるとわかりますがプロンプトで止まることはなく鍵が登録されることがわかると思います
DISPLAY=:0.0 SSH_ASKPASS=/path/to/echo_pass.sh setsid ssh-add /path/to/private_key.pem </dev/null
あとは動作確認として対象のサーバに ssh ログインしてみましょう
ちゃんとパスワードの入力を求められることなくログインできるようになっていると思います
おまけ: ssh-agent を自動起動する
上記のコマンドは ssh-agent が起動していることが前提です
ログイン時にてっとり早く起動させたい場合は以下の情報を ~/.bash_profile
などに記載します
if [ -z "$SSH_AUTH_SOCK" ]; then
# Check for a currently running instance of the agent
RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`"
if [ "$RUNNING_AGENT" = "0" ]; then
# Launch a new instance of the agent
ssh-agent -s &> .ssh/ssh-agent
fi
eval `cat .ssh/ssh-agent`
fi
これでログイン時に勝手に ssh-agent が起動します
ただしこの場合だとログインすることが前提なのでサーバが再起動した際には上がってきません
サーバが起動した際に ssh-agent を起動させたい場合は systemd 配下 で起動させましょう
最後に
ssh を使うツール (ansible など) にも応用できるのでプロンプトが出て処理が止まっちゃうようなジョブなどに使うと良いかなと思います
何度も言いますがパスワード平文は危険なので何かしら工夫して使うようにしてください
0 件のコメント:
コメントを投稿