再起動またはログアウトした後、ログインしてもパスワードのないSSHが続行されるようにしたいです。何とかssh-agentを実行してログインするときは、ssh-addコマンドを使用する必要があります。チュートリアルで次の行を追加する必要があることを読みました.bashrc
。
ssh_agent="$HOME/.ssh-agent.sh"
if [ -f $ssh_agent ]
then
source $ssh_agent > /dev/null
fi
同時にチュートリアルでも言及されています。
ssh-agentがすべてのプロセス(クローンジョブを含む)を実行している場合は、パスワードは必要ありません。ただし、ssh-agent が死亡または終了すると、以前の設定が維持されるため、問題が発生する可能性があります。
再起動/再ログイン後もパスワードなしでsshを使用できる安全な方法が必要です。どんな提案がありますか?
答え1
最も簡単な方法:インストールpam_ssh
。ログインすると、自動的にssh-agentが起動し、キーがロードされます。
難しい方法:これをログインスクリプト(~/.bash_profile
または~/.profile
)に入れてください:
check-ssh-agent() {
# `ssh-add` returns 2 if the agent is running but empty; ignore.
ssh-add -l &>/dev/null || (( $? == 2 ))
}
if ! check-ssh-agent; then
envfile=~/.ssh/agent-$HOSTNAME
if [ -f "$envfile" ]; then
. "$envfile" >/dev/null
fi
if ! check-ssh-agent; then
ssh-agent >"$envfile"
. "$envfile" >/dev/null
if [ -t 0 ]; then
# This `if` can be removed if all your keys are passphrase-less.
ssh-add
fi
fi
unset envfile
fi
「残りの設定」は$SSH_AUTH_SOCK
簡単に変更できる環境変数です。 (しかも、これはすべてできるgo error は ssh のエラーメッセージです。 )
答え2
固定プロキシソケットを使用してください。たとえば、
export SSH_AUTH_SOCK=/tmp/user.agent
ssh-agent -a /tmp/user.agent
ssh-add
ssh -f -N -R 22:localhost:2222 server
ssh-agent
ソケットの使用を開始し、秘密/tmp/user.agent
鍵ssh-add
をロードするために実行されます。その後、ssh
リモートポート転送を使用してサーバーへの接続を開始しました。サーバーのポート 2222 に接続しようとすると、クライアントに戻され、クライアントのポート 22 に接続されます。 -Nはシェルを起動しないことを意味し、-fはバックグラウンドでフォークと実行を意味します。ルータのポートを開かずにサーバーからデスクトップにアクセスできるようにするには、この種のコマンドを使用します。後で再度ログインしても、エージェントは実行中です。export SSH_AUTH_SOCK=/tmp/user.agent
SSHを再実行するには、プロキシソケットをリセットしてください。 ssh-add は、ssh-agent が初めて起動された後にのみ必要です。
答え3
そしてキーホルダーパスワードなしでキーペアを使用できます。これはssh-agentを取り巻くシンプルなシェルスクリプトラッパーなので、追加のソフトウェアをインストールする必要はありません。
SSHエージェントを実行しているかどうかを自動的に検出して使用します。特定の状況では、キーセットを自動的にロードして忘れるように設定できます。
他のシステムへのSSHアクセスを必要とするcronjobを処理するのに適しています。ファイルsource
に正しいファイルしかない場合、~/.keychain
cronjobは設定したすべてのキーを使用できます。
ノート:ログアウトしても機能しますが、システムを再起動したりエージェントをシャットダウンしたりしても機能しません。パスワードをファイルに保存しない限り、エージェントがシャットダウンしたときにキーを開いたままにする方法があります。明らかに、これは鍵をパスワードで保護するための全体的な目的を無効にします。
答え4
ssh-copy-id
を使用して公開鍵をリモートコンピュータにコピーできます。を実行してもパスワードを追加しないと、ssh-keygen
そのリモートシステムにsshを接続するたびにパスワードの入力を求められません。
したがって、ステップは次のようになります。
local$ ssh-keygen -t dsa
local$ ssh-copy-id remote
local$ ssh remote