ssh + agent forward + screen の設定

sshで接続元にある秘密鍵を使う場合、agent fowardすればOK
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 件のコメント:

コメントを投稿

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...