福冨諭の福冨論

RSSリーダーではこちらをどうぞ→https://feeds.feedburner.com/fuktommy

ssh-agentを複数の仮想端末から使う方法

ssh-agent を screen の中から使う方法」にインスパイヤされた話。

僕が家で使っているPCはWindowsで動いていまして、 Cygwin, CygTerm, PuTTY日本語版, zshを使っています。 SSHでサーバに接続したときは接続先でscreenを動かすんですけど、 ローカルでは複数のPuTTYを動かしています。 なぜかは自分でもわかりませんけど。

DebianだとSSHをインストールすると ~/.xsession が ssh-agent の子プロセス になるんですけど、Windowsだとそういう仕組みではないので、 こんな風にしているという話です。

まずssh-agentの起動は次のようなスクリプト(名前はssh-start)で行います。

#!/bin/sh
 ssh-agent | grep -v echo > "${HOME}/.ssh/agent-env"
 . "${HOME}/.ssh/agent-env"
 ssh-add
 echo "please type:"
 echo ". ~/.ssh/agent-env"

それから ~/.zshrc に次のような記述を追加します。

[ -e "${HOME}/.ssh/agent-env" ] && . "${HOME}/.ssh/agent-env"

一度シェル上で ssh-start を実行し、パスフレーズを入力しておけば、 他の端末でシェルを起動したとき、~/.ssh/agent-env から設定を読み込んでくれるので、 便利です。 ssh-start を実行したシェルでは . ~/.ssh/agent-env と打たなければいけませんが。

この点ではCygTermじゃなくてローカルでSSHサーバを動かして、 PuTTYPageantを組み合わせた方が楽なんですが、 シェル上でWindowsアプリケーションを起動したときにウィンドウが出ないとか、 外部の共有フォルダを参照したときにパーミッションがないなど、 なんかうまくいかないのでCygTermを使ってます。 sshdの実行ユーザとWindowsのログインユーザが違うのが原因っぽい。

Original Article: http://blog.fuktommy.com/1159370954