ssh -A [ホスト1]
すると、ホスト1からホスト2へsshする場合、ローカルの秘密鍵を使ってくれる。
ただし、ホスト1でscreenを起動している場合、うまくホスト2へ秘密鍵が受け継がれない。
agent fowardした場合、環境変数にSSH_*に接続元情報が格納されている。
screenでは、起動時の環境変数を保持しているため、デタッチした場合、初期の環境変数を保持しているので、うまく秘密鍵が取得できない
> env | grep SSH
SSH_CLIENT=XXX.XXX.XX.XXX XXX XX
SSH_TTY=/dev/pts/0
SSH_AUTH_SOCK=/tmp/ssh-xxxxxxxxxx/agent.xxxxxxxx
SSH_CONNECTION=XXXX.XXX.XXX.XXX XXX.XXX.XXX
そこでちょっと強引ですが、ssh でログイン時に上記環境変数をファイルに保存。
デタッチ後のscreenプロセスでそのファイルを使って、最新の状態に変更するようにしてみました。
bashrcに以下を追加
SSHV="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
for x in ${SSHV} ; do
(eval echo $x=\$$x) | sed 's/=/="/
s/$/"/
s/^/export /'
done 1>$HOME/bin/fixssh
screen を起動してsource ~/bin/fixsshすればOK
0 件のコメント:
コメントを投稿