私がすでに知っていること
- まず、
ssh-agent
コマンドを使用する必要がありますeval $(ssh-agent)
- セキュリティ上の理由からこれを行う必要があります。子プロセスは上記のプロセスの環境変数を変更できません。
- 起動すると、
ssh-agent
現在のシェルに手動でエクスポートできる2つの変数が提供されます。
私は知りません、あなたの助けが必要です。
- 現在開いているすべての端末に環境変数を渡すことはできますか?
- 1つのシェルの代わりにコンピュータ全体に環境変数を渡すことはできますか?
ssh-agent
eval
手動で起動する方法はありますかexport
?
あなたの助けをいただきありがとうございます:)
答え1
時々出力をファイルにリダイレクトします。
ssh-agent > ~/.ssh-agent
次に、次の操作を実行して、同じウィンドウまたは別のウィンドウでその環境を選択できます。
. ~/.ssh-agent
答え2
- 現在開いているすべての端末に環境変数を渡すことはできますか?
変数はファイルに書き込まれ、各端末で手動で取得する必要があります。
- 1つのシェルの代わりにコンピュータ全体に環境変数を渡すことはできますか?
簡単なことではありません。一度開始されたプロセスのほとんどは、外部からの環境変数への変更をまったく許可せず、単に親プロセスから継承された環境をそのまま使用します。シェルはソーススクリプトから環境設定を「プール」することはできますが、プロセスの外部で新しい環境変数をソーススクリプトに「プッシュ」することはできません。 (ターミナルウィンドウとその中のシェルは2つの別々のプロセスです。シェルプロセスの環境あなたが普段に関心を持っていること。 )
一方、セキュリティ上の理由からユーザーログインを処理するプロセスは、新しいセッションに渡された環境を一部の組み込みまたはシステム管理者によって制御される「安全な」環境変数のリストに事前に整理する傾向があります。
システムの全員が特定の場所に認証されたSSH接続を作成できるようにするには、rootとしてパスワードなしのSSHキーペアを作成し、/etc/skel/.ssh/
そのキータイプディレクトリの主キー名を使用して入力します。これで、作成したすべてのユーザーがその時点から自動的にそのキーのコピーを取得します。デフォルト名を使用したため、SSH クライアントはその時点から作成したすべてのユーザーに対して自動的にそのキーのコピーを取得します。発信接続。
私はこれが誰にでも単一の共有SSHエージェントへのアクセスを許可するよりもはるかに安全ではないとは思いません。実際、このアプローチでは、あるユーザーが共有SSHエージェントに「保存されているすべてのキーのマウント解除」コマンドを送信して、他のユーザーの操作を妨げることはできません。
(これは可能性があるようだ。XYの問題。単一のSSHエージェントをシステム全体で共有し、正確に何を達成しようとしていますか? SSHエージェントを共有して解決しようとしている実際の問題の要件だけを説明すると、より良い解決策がある可能性があります。 )
- 評価したり手動でエクスポートせずにssh-agentを起動する方法はありますか?
システムへのルートアクセス権がある場合は、pam_ssh.so
システムのPAM構成にPAMモジュールを追加できます。このモジュールには2つの機能があります。
- 認証モジュールとして使用すると、
~/.ssh/login-keys.d/
ユーザーが...にあるSSHキーのパスワードを知っていることを確認してユーザーの身元を認証できますが、興味のある部分ではありません。 - セッション管理モジュールとして使用される場合は、SSHエージェントを起動し、そのユーザーに属するSSHキー(パスワードがないか、使用されているログインパスワードと同じパスワード)を使用して自動的にロードし、適切な環境変数を次のセッションに挿入します。環境。
少なくともDebianと関連ディストリビューションはpam_ssh.so
PAMモジュールをlibpam-ssh
。
答え3
- 開いているすべての端末に環境変数を渡すには、シェルの起動スクリプト(bashの〜/ .bashrcなど)にエクスポートコマンドを追加します。
- 環境変数をコンピュータ全体に渡すことはできません。各シェルセッションは独自のプロセスで実行され、独自の環境変数を持ちます。
- eval を使用する場合、または環境変数を手動でエクスポートしないと、ssh-agent を起動できません。 ssh-agentが正しく機能するためにはシェル環境を変更する必要があるため、セキュリティ上の理由からこれらの手順が必要です。
答え4
これは解決策になることができますか? :
if [ -S "$SSH_AUTH_SOCK" ] && [ ! -h "$SSH_AUTH_SOCK" ] ; then
ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
fi
私はGNU画面を介してプロキシを渡すために〜/.ssh/rcでこれを使用しています。
次に、必要なすべてのセッションについてexport SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
そのセッションに参加します。