ssh-agentのシェア

2016年11月27日日曜日

chromebook Windows プログラム

t f B! P L
今日はssh-agentを複数ウィンドウでシェアする方法の説明です。

以前必要があって調べた時はすぐ出てきたんですが、chromebookの設定で再度調べたら全然欲しい情報がヒットしなかったので、まとめときます。

ssh-agentは、sshでログインする時のパス入力を自動化する仕組みです。詳細はググッてください。

ssh-keygenしてssh-copy-idしたら、後は.profileや.bash_profileに以下を書きます。

if [ -f ~/.ssh-agent ]; then
    . ~/.ssh-agent
fi
if [ -z "$SSH_AGENT_PID" ] || ! kill -0 $SSH_AGENT_PID; then
    ssh-agent > ~/.ssh-agent
    . ~/.ssh-agent
fi

これでssh-agentを一つだけ起動して、全てのウィンドウでそれをシェアします。毎回、ssh-addしなくて良くなるわけです。ログインしたら最初に一度だけssh-addしてください。後はそのパスフレーズを全てのウィンドウでシェアします。

最初のifで.ssh-agentファイルがあれば、そこに環境変数が書いてあるはずなのでロード。次のifで環境変数に問題があったり、設定されているプロセスが存在しなければ、ssh-agentの再起動をしています。

ssh-addなどで調べずkillで調べているのは、cygwinでうまく動作しなくなるからです。

利用する全てのマシンの.ssh/configには以下を書いておきましょう。

Host *
    ForwardAgent yes

リモートのリモートにも自動でログインできるようになります。

続けて、screen用の設定です。以下はsshで入ったリモートでscreenを動かして、その中から更にsshする人用の設定です。screenを使わないなら必要ありません。

sshしてscreenした直後は調子いいのに、一度detachするとssh-agentが効かなくなる問題への対策が、以下になります。

まず、.screenrcに以下を追加します。

setenv SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock

そして、 ~/bin/screenとして以下のスクリプトを用意。

#!/bin/sh

# Fix SSH auth socket location so agent forwarding works with screen.
case .$SSH_AUTH_SOCK in
.$HOME/.ssh/ssh_auth_sock)
  # Called inside of screen, so nothing to do here
  ;;
*)
  if test "$SSH_AUTH_SOCK"; then
    ln -sf $SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock
  fi;;
esac

# Execute screen
exec /usr/bin/screen "$@"

sshしてscreenした時の問題の原因は、sshする度に、SSH_AUTH_SOCKで接続すべき接続先が変わるのに、screen内の環境は変化しないことにあります。

ここでは、SSH_AUTO_SOCKをシンボリックリンクファイルに置き換えて、screenの度にシンボリックリンクを更新することで対策しています。

Happy hacking! :-)

ラベル

AndroidTV (1) chromebook (2) DIY (4) docker (1) git (4) Ingress (4) llvm (3) MacBook (1) MVNO (1) narou (1) PS4 (2) QNAPNAS (9) SIMD (9) SmartBand (8) Ubuntu (9) VAIO (1) Windows (2) wsl (2) wsl2 (1) Xperia (20) トルネ (3) プログラム (26) ルーター (18) 音楽 (6) 家事 (2) 自炊 (2) 電子書籍 (2) 洋食 (4)

フォロワー

QooQ