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タイプのシェルとevalssh-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-フォークの後で実行されたが、後続の実行なしのコマンド
それが重要かどうかはわかりません。
ローカルにログインするのではなく、ユーザーがssh
ingしているとのことですが、したがって、use-ssh-agent
の/etc/X11/Xsession.options
は赤のニシンです。これは、SSHセッションでは実行されません。ローカルでX11 GUIデスクトップにログインするとき(またはVNCまたはRDP経由のような仮想X11セッションを使用するとき)だけです。 。
代わりに、libpam-ssh
がどちらかのシステムにインストールされているかどうかを確認する必要があります。 SSH秘密鍵のパスフレーズを使用してユーザーを認証するように構成できますが、これはオプションであり、その機能のために~/.ssh/login-keys.d/
に鍵を明確に配置する必要があります。
ただし、その他の機能は、ログインセッションでSSHエージェントを自動起動し、パスフレーズがユーザーのログインパスワードと同じ場合、SSH秘密鍵をエージェントに自動的に追加することです。これがシステム間の異なる動作の原因である可能性があると思います。
のために
$ eval `ssh-agent -s`
「起動スクリプト」に入れて機能するように構築する場合、セッション、および最終的には環境が想定されるターミナルは、そのスクリプトの子孫(fork
およびexec
)でなければなりません。その理由は、評価時にssh-agent -s
の出力が環境変数シェルでeval
を設定するためです。そこで形成され、彼らは受け継がれるかもしれません、そして彼らは途中で同様に失われるかもしれません。
したがって、ログイン中にスクリプトAによってssh-agent
が実行されているが、シェルスクリプトを開始するターミナルBが子孫ではない Aである場合、Bで環境を表示できません。
ssh-agent
をsystemd --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}
に対応することに注意してください。
注:これには不満です!
私はここで答えを見つけました:
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
あなたはそれを述べました
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa
必要に応じて機能します。 .bash_profileまたは.xsessionで適切なタイミングで実行する必要があるだけです。 (date; env|sort) >> /tmp/log
のようなデバッグ文を追加して、いつ実行されるかを正確に理解できるようにします。