web-dev-qa-db-ja.com

ssh-agentがセットアップされていない(SSH_AUTH_SOCK、SSH_AGENT_PID環境変数が設定されていない)

Kubuntu 12.04で友達の新しいユーザーアカウントを設定しました。彼がsshを使用すると、次のエラーが発生します。

認証エージェントへの接続を開けませんでした

一部のbashスクリプトでsshを実行しています。

そのエラーの原因となる可能性のあるさまざまな事柄を検討した後、私はこの解決策に出くわしました。

$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa

次に、期待どおりにsshコマンド(およびbashスクリプト)を実行できます。

これらの2つのコマンドを実行する前に、環境変数は端末で設定されていません。

$ echo $SSH_AGENT_PID

$ echo $SSH_AUTH_SOCK

$ 

コマンドを実行した後、env変数は期待どおりに設定されます。ただし、それらは設定されたままではありません(たとえば、別のシェルで、または再起動後)。

彼が環境変数を設定するためにこれらの2つのコマンドを実行する必要がないように彼のコンピューターをセットアップする方法を知りたいです。私のコンピュータでそれらを実行する必要はありません。これまでのところ、マシンの違いはわかりません。

この情報はmanページに表示されますが、Ubuntuがエージェントを通常自動的に設定する方法や、友人のマシンで何が起こっているのかがわかりません。

エージェントをセットアップするには、主に2つの方法があります。1つ目は、エージェントが、ssh-agent xterm&などのいくつかの環境変数がエクスポートされる新しいサブコマンドを開始することです。 2つ目は、エージェントが必要なシェルコマンドを出力することです(sh(1)またはcsh(1)構文のいずれかを生成できます)。これは、呼び出し側のシェルで評価できます(例:eval ssh-agent -sは、sh(1)またはksh(1)などのBourneタイプのシェルとeval ssh-agent -c csh(1)およびその派生物用。

acctをインストールして再起動すると、これはlastcommの出力です。

ssh-agent         F    newuser __         0.12 secs Wed Aug  7 11:02
ssh-agent         F    newuser __         0.00 secs Wed Aug  7 20:34
ssh-agent         F    newuser __         0.02 secs Wed Aug  7 20:02
ssh-agent         F    newuser __         0.01 secs Thu Aug  8 12:39
ssh-agent         F    newuser __         0.02 secs Thu Aug  8 07:45

Manページから:

F-フォークの後で実行されたが、後続の実行なしのコマンド

それが重要かどうかはわかりません。

13
MountainX

ローカルにログインするのではなく、ユーザーがsshingしているとのことですが、したがって、use-ssh-agent/etc/X11/Xsession.optionsは赤のニシンです。これは、SSHセッションでは実行されません。ローカルでX11 GUIデスクトップにログインするとき(またはVNCまたはRDP経由のような仮想X11セッションを使用するとき)だけです。 。

代わりに、libpam-sshがどちらかのシステムにインストールされているかどうかを確認する必要があります。 SSH秘密鍵のパスフレーズを使用してユーザーを認証するように構成できますが、これはオプションであり、その機能のために~/.ssh/login-keys.d/に鍵を明確に配置する必要があります。

ただし、その他の機能は、ログインセッションでSSHエージェントを自動起動し、パスフレーズがユーザーのログインパスワードと同じ場合、SSH秘密鍵をエージェントに自動的に追加することです。これがシステム間の異なる動作の原因である可能性があると思います。

0
telcoM

のために

$ eval `ssh-agent -s`

「起動スクリプト」に入れて機能するように構築する場合、セッション、および最終的には環境が想定されるターミナルは、そのスクリプトの子孫(forkおよびexec)でなければなりません。その理由は、評価時にssh-agent -sの出力が環境変数シェルでevalを設定するためです。そこで形成され、彼らは受け継がれるかもしれません、そして彼らは途中で同様に失われるかもしれません。

したがって、ログイン中にスクリプトAによってssh-agentが実行されているが、シェルスクリプトを開始するターミナルBが子孫ではない Aである場合、Bで環境を表示できません。

ssh-agentsystemd --userサービスとして開始した場合は、代わりに規則を使用する必要がある場合があります。ssh-agentに変数を指定させず、エージェントの起動時に一般的な知識を使用してください。そして、セッションを開始するとき。たとえば、私の~/.config/systemd/user/ssh-agent.serviceは次のようになります。

[Unit]
Description=SSH agent

[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

[Install]
WantedBy=default.target

そして、私の~/.profileには、

export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"

前者の%tは、後者の${XDG_RUNTIME_DIR}に対応することに注意してください。

注:これには不満です!

3
stefan

私はここで答えを見つけました:

http://www.bernatchez.net/userauth.html

Ubuntuでは、ssh-addユーティリティは証明書ファイルのロードに失敗します。これは、エージェントがgnome-keyringによって実装されたものである場合に発生します。修正は、gnome-keyringのsshコンポーネントの使用を停止することです。初期化プロセスは実際に真のssh-agentを起動し、それからgnome-keyring-ssh.desktopを起動してAUTH_SOCKETを上書きし、引き継ぐため、gnome-keyring-ssh.desktopを無効にすることで元のssh-agentに戻すことができます。

Gnome-keyring-ssh.desktopを無効にします。

cd /etc/xdg/autostart/
Sudo emacs gnome-keyring-ssh.desktop

次の行をデスクトップファイルに追加して保存し、再起動します。

X-GNOME-Autostart-enabled=false
1
Hamdi Ghodbane

あなたはそれを述べました

$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa

必要に応じて機能します。 .bash_profileまたは.xsessionで適切なタイミングで実行する必要があるだけです。 (date; env|sort) >> /tmp/logのようなデバッグ文を追加して、いつ実行されるかを正確に理解できるようにします。

0
J_H