Kubuntu 12.04で友達の新しいユーザーアカウントを設定しました。彼がそれを使用すると、ssh
次のエラーが発生します。
認証プロキシへの接続を開くことができません。
ssh
私たちはいくつかのbashスクリプトを実行しています。
このエラーを引き起こす可能性のあるさまざまな要因を調べて、次の解決策を見つけました。
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa
ssh
その後、期待どおりにコマンド(およびbashスクリプト)を実行できます。
次の2つのコマンドを実行する前に、環境変数が端末に設定されていませんでした。
$ echo $SSH_AGENT_PID
$ echo $SSH_AUTH_SOCK
$
コマンドを実行すると、環境変数が期待どおりに設定されます。ただし、設定は保持されません(たとえば、他のシェル全体や再起動中など)。
私は彼が環境変数を設定するためにこれらの2つのコマンドを実行する必要がないように彼のコンピュータを設定する方法を知りたいと思います。私のコンピュータで実行する必要はありません。これまで私は私たちのマシンの間に何の違いも見ませんでした。
マニュアルページでこの情報を見ましたが、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
マニュアルページから:
F
- コマンドは分岐後に実行されますが、後続の実行はありません。
これが重要かどうかはわかりません。
答え1
~のため
$ eval `ssh-agent -s`
「開始スクリプト」を置くときにセッションと最終的に環境があると予想される端末は、そのスクリプトの子でなければなりません(およびfork
)exec
。その理由は、評価時に出力にssh-agent -s
環境変数が設定されているためです。シェルから呼び出されるeval
。そこから伝えられたかもしれませんし、途中で失われたかもしれません。
したがって、ssh-agent
ログイン中にスクリプトAによって実行されますが、シェルスクリプトを起動した端末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}
後者に該当することに注意してください。
メモ:私はこれについて満足していません!
答え2
ユーザーがssh
ローカルにログインせずにログインしたと言われました。したがって、これはuse-ssh-agent
赤い/etc/X11/Xsession.options
ニシンです。 X11 GUIデスクトップにローカルにログインしている場合にのみ(またはVNCまたはRDPを介して一部の仮想X11セッションを使用して)、SSHセッションでは実行されません。
libpam-ssh
代わりに、両方のシステムのいずれかにインストールされていることを確認する必要があります。ユーザーを認証するためにSSH秘密鍵パスワードを使用するように構成できますが、これはオプションであり、~/.ssh/login-keys.d/
この機能のために特別に鍵を配置する必要があります。
ただし、もう1つの機能は、ログインセッションでSSHエージェントを自動的に起動し、パスワードがユーザーのログインパスワードと同じ場合、エージェントにSSH秘密鍵を自動的に追加することです。これがシステム間で異なる動作を引き起こす可能性があると思います。
答え3
あなたが言及した
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa
期待どおりに動作します。したがって、タイムリーに.bash_profileまたは.xsessionで実行するだけです。デバッグステートメントを追加すると、(date; env|sort) >> /tmp/log
実行時期を正確に理解するのに役立ちます。
答え4
マルチユーザーJupyterhub Python環境用のSSH-Keygen:
設定中SSH-キーの生成中マルチユーザーJupyter Python環境これは大きな欲求不満であることが判明しました...これは間違いなくgitのプレーンテキストhttpパスワードよりも望ましいです。
SSH_AUTH_SOCK
cmdを実行してもコンピュータに転送されないことを知りませんでした。ssh-add
eval ssh-agent
@ステファン上記には、すべてを一目で見ることができるように、非常に良い説明があります! ssh-add のマニュアルページに関するより有用な情報ここしかも…
単一のbash cmdですべてを実行する必要があります!
以下はGitHubの指示に従った例です。ここSSH 鍵生成情報。
- Pythonユニットで(bang)を使用しているので、
!
jupyterでbashコマンドを実行します。追加情報ここ。 - また、
&& \
私のbashコマンドはjupyter Pythonノートブックデバイスにラップされているので、一つ注文する:
!ssh-keygen -t ed25519 -C "[email protected]" -f $HOME/.ssh/id_ed25519 -N "" <<< y && \
eval "$(ssh-agent -s)" && \
ssh-add $HOME/.ssh/id_ed25519
SSH設定の確認
引き続きSSHキーをgithubに追加します。その場合は、できることGithub認証を確認してください、次のコマンドを実行したときに私に効果的でした。
!ssh -o "StrictHostKeyChecking no" -T user@[email protected]
- フラグは次のとおりです
-o "StrictHostKeyChecking no"
。いいえこれは中間者攻撃が可能であるため推奨されます。プログラムでこれを受け入れる方法がわかりません。はいまたは、既知のホストをインポートして既知のホストファイルに手動で追加することもできます。