以前必要があって調べた時はすぐ出てきたんですが、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! :-)
0 件のコメント:
コメントを投稿