2

で、パスワードの入力$ ssh localhostを求められました。ログインごとにパスワードを入力するのは面倒で面倒でした。

それで、パスフレーズ付きのsshキーを作成しました..

$ ssh-keygen -t rsa

の内容をコピーしまし~/.ssh/id_rsa.pub~/.ssh/authorized_keys

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

さて、パスフレーズ$ ssh localhostの提供を求められました。改善はありませんが、 passwordの代わりにpassphraseを提供していました。

私は~/.ssh/authorized_keys に公開鍵を追加しても自動的にログインしません に遭遇しましたが、問題は解決しませんでした。コメントが述べているように、キーがパスフレーズで作成された場合、常にパスフレーズを要求します。

ただし、ssh キーが passphraseなしで作成された場合、パスフレーズはどのssh操作にも必要ありません。

この投稿から得た重要な点は、verbose フラグ-v

debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>

検索するPEM_read_PrivateKey failedと、かなりの数の投稿に出くわしました。そのうちのいくつかは、stackoverflow 自体からのものです。

しかし、適切な解決策を見つけることができませんでした。

次に、sshエージェントを使用してパスフレーズを自動的に入力することについて述べている、パスワードなし、パスフレーズなしのsshのセットアップに出くわしました。

$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa

また

$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa

繰り返しますが、その特定のセッションでのみ解決されました。新しいセッションを開始するたびに、実行する必要があります

$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa

.bashrc または .zshrc に追加できますが、セッションごとにパスフレーズを入力するのは面倒です。

セッション全体で同じ ssh-agent を使用する方法はありますか?

4

1 に答える 1

2

クロスセッションを解決するにssh-agentは、理解する必要があります

$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa

を実行するとssh-agent、いくつかのunix コマンドSTDOUT

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-qtCEoF3298/agent.3298; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3299; export SSH_AGENT_PID;
echo Agent pid 3299;

a を評価またはeval-ing すると、コマンドの出力commandが実行されます。

したがって、eval`ssh-agent`翻訳すると

$ SSH_AUTH_SOCK=/tmp/ssh-qtCEoF3298/agent.3298; export SSH_AUTH_SOCK; SSH_AGENT_PID=3299; export SSH_AGENT_PID; echo Agent pid 3299;

上記のステートメントは、環境変数SSH_AUTH_SOCKおよびSSH_AGENT_PIDを設定し、エージェントのプロセス IDSTDOUT

環境変数SSH_AUTH_SOCK は UNIX ソケットを指します

$ file $SSH_AUTH_SOCK
/tmp/ssh-qtCEoF3298/agent.3298: socket 

他のssh操作では、このソケットを探し、存在する場合はそれを使用するか、パスフレーズを要求します。ただし、このソケットは、使用する前に認証する必要があります。そして、それはアイデンティティを追加することによって行われます

$ ssh-add ~/.ssh/id_rsa

環境変数 SSH_AUTH_SOCK がエクスポートされているため、このシェルから生成されたすべてのシェルで使用できますが、新しい login では使用できません

次に、 ssh-find-agent.bashに誘導されるssh-agent と ssh-add の理解に出くわしました

ssh-find-agent.bashは、すべてのライブ エージェント ソケットを探し、それらを環境変数としてエクスポートします。

Jon Cairnsが投稿で提案したように。

アクセス可能な場所 (例: ~/.ssh-find-agent) にダウンロードし、シェルの構成ファイル (例: ~/.bashrc、~/.zshrc) に以下を追加します:***

source ~/.ssh-find-agent/ssh-find-agent.bash

set_ssh_agent_socket

そして、これは私が探していたソリューションです

好みに合わせて関数名を変更しました。同じものがssh-auth-sockGPGにあります。 , GNOME&に 関連する関数OSXは、私の目的には必要ありません。スクリプトをリファクタリングする必要があります。

しかも、OS X専用キーホルダー付き。 したがって、これらの関数を実行するのはLinux

コマンド全体よりも入力が速いeval ssh-agent&& ssh-add ~/.ssh/id_rsaのエイリアスも作成しました。

于 2014-08-06T05:55:58.583 に答える