ログイン/再起動時にパスワードのない自動SSH

ログイン/再起動時にパスワードのない自動SSH

再起動またはログアウトした後、ログインしてもパスワードのない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.agentssh-addをロードするために実行されます。その後、sshリモートポート転送を使用してサーバーへの接続を開始しました。サーバーのポート 2222 に接続しようとすると、クライアントに戻され、クライアントのポート 22 に接続されます。 -Nはシェルを起動しないことを意味し、-fはバックグラウンドでフォークと実行を意味します。ルータのポートを開かずにサーバーからデスクトップにアクセスできるようにするには、この種のコマンドを使用します。後で再度ログインしても、エージェントは実行中です。export SSH_AUTH_SOCK=/tmp/user.agentSSHを再実行するには、プロキシソケットをリセットしてください。 ssh-add は、ssh-agent が初めて起動された後にのみ必要です。

答え3

そしてキーホルダーパスワードなしでキーペアを使用できます。これはssh-agentを取り巻くシンプルなシェルスクリプトラッパーなので、追加のソフトウェアをインストールする必要はありません。

SSHエージェントを実行しているかどうかを自動的に検出して使用します。特定の状況では、キーセットを自動的にロードして忘れるように設定できます。

他のシステムへのSSHアクセスを必要とするcronjobを処理するのに適しています。ファイルsourceに正しいファイルしかない場合、~/.keychaincronjobは設定したすべてのキーを使用できます。

ノート:ログアウトしても機能しますが、システムを再起動したりエージェントをシャットダウンしたりしても機能しません。パスワードをファイルに保存しない限り、エージェントがシャットダウンしたときにキーを開いたままにする方法があります。明らかに、これは鍵をパスワードで保護するための全体的な目的を無効にします。

答え4

ssh-copy-idを使用して公開鍵をリモートコンピュータにコピーできます。を実行してもパスワードを追加しないと、ssh-keygenそのリモートシステムにsshを接続するたびにパスワードの入力を求められません。

したがって、ステップは次のようになります。

local$ ssh-keygen -t dsa
local$ ssh-copy-id remote
local$ ssh remote

関連情報