1PasswordによるSSHエージェントフォワーディング
1Passwordマニュアル|SSHエージェント転送を活用し、リモート環境で安全かつ効率的にSSHリクエストを行う方法を詳しく解説します。
1Passwordマニュアル|SSHエージェント転送を活用し、リモート環境で安全かつ効率的にSSHリクエストを行う方法を詳しく解説します。
やからGitコマンドを実行したりコミットに署名したりするなど、ローカルマシンであるかのようにリモート環境内でSSHリクエストを行うことができます。
リモートホストに秘密鍵をSaveする代わりに、SSHエージェントフォワーディングを使用してリクエストをローカルの1PasswordSSHエージェントに転送できます。次に、秘密鍵がローカルの1Passwordプロセスを離れることなく、生体認証でリクエストを承認できます。
または用の1Passwordをインストールしてサインインしてください。
、ローカルマシン上で実行されていることを確認してください。
💡Windowsをお使いの場合
SSHエージェントフォワーディングはWindowsではサポートされていませんが、、WindowsホストからWSLインスタンスでSSHリクエストを認証できます。
リモートホストのエージェントフォワーディングを有効にすると、リモート環境内で行う全SSHリクエストが1PasswordSSHエージェントソケットを介してローカルの1Passwordプロセスに転送されます。
1Passwordで設定したオプション(フィンガープリントなど)を使ってSSHリクエストをローカルで承認できます。その後、リモートサーバーに秘密鍵を提供しなくても、承認がリモートホストに転送されます。
⚠️注意
シングルセッションのみエージェントフォワーディングをオンにするには、次のsshコマンドで-Aフラグを使用します。
ssh -A user@example.com
エージェントフォワーディングをオンにしてリモートホストに接続すると、リモートホストの環境変数SSH_AUTH_SOCKが自動的に設定されます。このソケット経由で送信されたデータは、ローカルの1Passwordソケットに転送されます。
user@example.com:~$ echo $SSH_AUTH_SOCK 結果の例: /tmp/ssh-XXXXNpdlnL/agent.151
エージェントフォワーディングが機能しているかどうかを確認するには、次のコマンドを実行して、1Passwordからリモートホストに転送されたSSH鍵のリストを表示させます。
user@example.com:~$ ssh-add -l 結果の例: 256 SHA256:2zmxMpLy5MeIx18pBUkumptKkKinlghygOvV6URe8QI SSH Key from 1Password (ED25519)
SSH鍵がリストに表示されたら、リモートサーバー内からSSHリクエストを実行してみてください。
user@example.com:~$ ssh -T git@github.com
ローカルマシン上の1Passwordアプリで、リクエストを承認するように求められます。
セッションごとに-Aフラグを使う必要がないように、特定のホストに対してSSHエージェントフォワーディングを常に設定したい場合は、そのホストを含めるように~/.ssh/configファイルを編集します。
例(Host example.com) ForwardAgent yes
エージェントフォワーディングセッションでローカルターミナルやIDEやその他のSSHクライアントにSSH鍵の使用を許可すると、同じキーを使用してリモート環境内で行われる全ての新しい接続も許可されます。他のユーザーが同じOSユーザーとしてリモート環境にアクセスした場合、セッション中はSSH鍵を使用してリモートホストからの接続を認証できます。
ただし、リモート環境で利用可能なその他のSSH鍵は、使う前にユーザーの承認が必要です。エージェント内の全ての鍵をリモート環境で追加の承認なしに使える標準のOpenSSHエージェントとは異なり、1PasswordSSHエージェントでは、各SSH鍵を使う前にユーザーの承認が必要です。リモート環境からこれらの鍵のいずれかを使おうとすると、認証が必要な1Password承認プロンプトが表示されるため、エージェントフォワーディングはOpenSSHエージェントよりも1Passwordの方が安全です。
以下のことをお勧めします。
エージェントフォワーディングは、必要な場合かつ安全であると信頼できる環境でのみ使用してください。
~/.ssh/config(悪い例 👎) Host * ForwardAgent yes
~/.ssh/config (良い例👍) Host *.gitpod.io ForwardAgent yes
ローカルの統合開発環境(IDE)を使ってクラウド開発環境(CDE)に接続し、リモートGitコミットをプル、プッシュ、署名する場合は、ローカルの1PasswordSSHエージェントを介してこれらのコマンドを認証できます。
例えば、クラウドベースの開発環境への認証に使うIDEデスクトップアプリがローカルワークステーションにあるとします。リモートGitリポジトリーにアクセスするには、CDEワークスペースを使い、Gitリクエストを認証してコミットに署名する必要があります。SSHエージェントフォワーディングを使うと、ローカルワークステーションで実行されている1PasswordSSHエージェントを介して、IDEデスクトップアプリでCDEワークスペースからのSSHおよびGitコマンドを認証できます。
エージェントフォワーディングが正しく設定されているかどうかを確認するには、IDEでリモートシェルを開き、次のコマンドを実行します。
$ ssh-add -l
結果の例: 256 SHA256:2zmxMpLy5MeIx18pBUkumptKkKinlghygOvV6URe8QI SSH Key from 1Password (ED25519)
エージェントがSSHリクエストに使えるSSH鍵のリストが表示されます。
CDEがGitでの認証にHTTPSを使うように設定されていて、代わりにSSHを使う場合は、次のコマンドを実行してCDEのリモートGitの設定を変更します。
$ git config --global url."ssh://git@".insteadOf "https://"
あるいは、クラウド開発を初期化するスクリプト(cloud-init)またはドットファイルにコマンドを追加することもできます。
次回CDEからGitリクエストを行うと、1Passwordはリクエストを承認するように要求します。
例:
$ git fetch
今後SSH認証のみを使う場合は、リポジトリーへのHTTPS書き込みアクセスを取り消すことをお勧めします。
ローカル.gitconfigファイルはクラウド開発環境に自動的に転送されないため、リモートGitコミット署名を設定するには、CDEのGit設定を変更する必要があります。
コミット署名にSSHを使うようにGitを設定します。
git config --global gpg.format ssh
コミットに常に署名するようにGitに指示します。
git config --global commit.gpgsign true
コミットに署名するために使うSSH鍵を設定します。
git config --global user.signingkey <your SSH public key>
SSH経由で接続するリモートワークステーションがあり、そのワークステーションからSSHおよびGitリクエストを実行する場合は、ローカルホストで実行される1Passwordエージェントを通じてそれらのリクエストを認証できます。
例えば、自宅に全てのGitリポジトリーを含むデスクトップワークステーションがあるとします。外出先でCreate業したい場合は、ラップトップを使用してSSH経由でリモートワークステーションに接続し、GitリポジトリーでCreate業します。SSHエージェントフォワーディングを使うと、ローカルラップトップで実行されている1PasswordSSHエージェントを介して、リモートワークステーションからのSSHおよびGitコマンドを認証できます。
エージェントフォワーディングが正しく設定されているかどうかを確認するには、リモートワークステーションに接続し、次のコマンドを実行します。
$ ssh-add -l
結果の例:
256 SHA256:2zmxMpLy5MeIx18pBUkumptKkKinlghygOvV6URe8QI SSH Key from 1Password (ED25519)
エージェントがSSHリクエストに使えるSSH鍵のリストが表示されます。
リモートワークステーションにも1PasswordSSHエージェントがインストールされている場合は、GitとSSHが、リモートワークステーションにインストールされている1Passwordアプリのエージェントソケットではなく、ローカルホストから転送されたソケットを使うようにしてください。
IdentityAgentは環境変数SSH_AUTH_SOCKよりも優先されるため、SSHシェルを使用していない場合にのみ設定が適用されるように、リモートワークステーションの~/.ssh/configIdentityAgentファイルを例えば次のように変更することをお勧めします。
Match host * exec "test -z $SSH_TTY"
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
その後、リモートワークステーションのSSHシェルから実行される全てのGitまたはSSHコマンドは、SSH_AUTH_SOCK認証に転送されたものを使用し、1PasswordはローカルホストからのSSHリクエストを承認するように要求します。
この変更は、ワークステーションにリモートでアクセスするのではなく、ローカルで使う場合の1PasswordSSHエージェントの実行方法には影響しません。IdentityAgentワークステーションで実行されているSSHエージェントを使うために、設定は通常通り適用されます。
ローカル.gitconfigファイルはリモートワークステーションに自動的に転送されないため、デフォルトではリモートGit設定が使われます。
op-ssh-sign署名プログラムは、SSH_AUTH_SOCKとSSH_TTYの両方の環境変数が設定されていることを検出すると、リモートワークステーションの1Passwordソケットではなく、ローカルホストから転送されたソケットを使うように自動的に適応します。
リモートシェルまたはリモートで接続されたIDEから認証が必要なSSHまたはGitリクエストを実行すると、1Passwordは、リモートワークステーションへの接続に使うターミナルまたはIDEのSSH鍵の使用を承認するように求めます。
1Password SSH Agentでエージェントフォワーディングを使う際に問題が発生する場合は、確認すべき点がいくつかあります。
「echo $SSH_AUTH_SOCK」をターミナルで実行して、サーバー上でこの環境変数が設定されていることを確認します。
user@example.com:~$ echo $SSH_AUTH_SOCK
結果の例:
/tmp/ssh-XXXXNpdlnL/agent.151
ターミナルで「ssh-add -l」を実行すると、1Passwordからリモートホストに転送されたSSH鍵のリストが表示されます。
user@example.com:~$ ssh-add -l
結果の例:
256 SHA256:2zmxMpLy5MeIx18pBUkumptKkKinlghygOvV6URe8QI SSH Key from 1Password (ED25519)
SSHエージェントフォワーディングは信頼できるホストでのみ使うようにしてください。こちらで
OpenSSHでは、SSHエージェントフォワーディングはデフォルトでオフになっています。またはに対してオンにすることを選択できます。
にエージェントフォワーディングを設定するか、エージェントフォワーディングを許可するように~/.ssh/configファイルを準備してください。デフォルトでは、全ホストに対してSSHエージェントフォワーディングをオンにしたりしないでください。
エージェントフォワーディングのために、常にForwardAgent yesディレクティブのスコープを特定のホストまたはドメインに絞ることをお勧めします。例えば、 のエージェントフォワーディングをオンにするには、以下のようにしてください。
クラウド開発環境からのGitリクエストを承認できるようにSSHエージェントフォワーディングを設定するには、。IDEのリモート開発統合では、これを自動的に認識するはずです。
クラウド開発環境で認証が必要なSSHまたはGitリクエストを実行すると、1PasswordはCDEに接続されているIDEのSSH鍵の使用を承認するように求めます。リクエストを承認すると、IDE全体がそのキーの使用を承認されます。同じOSユーザーでクラウド開発環境で実行されている全てのプロセスも承認されるため、として留意する必要があります。
リモートワークステーションからのSSHおよびGitリクエストを承認できるようにSSHエージェントフォワーディングを設定するには、ローカルホスト上の、リモートワークステーションでのエージェントフォワーディングを許可します。
ローカルホストで使用しているのと同じSSH鍵を使って、リモートワークステーションでを設定している場合は、設定を変更する必要はありません。
リクエストを承認すると、アプリ全体がこのキーの使用を許可されます。同じOSユーザーの下でリモートワークステーション上で実行されている全てのプロセスも許可されるため、として留意する必要があります。
変数が設定されていない場合、SSHエージェントフォワーディングは機能しません。、およびいることを確認してください。
SSH鍵がリストに表示されない場合は、そのキーが、またかどうかを確認してください。
リモートサーバーでエージェントフォワーディングを使うには、サーバーの
でAllowAgentForwardingオプションをYesに設定する必要があります。