smd-loop
セッションでプロセスを開始するsystemctlサービスがありますscreen
。このプロセスにはリモートSSHソース(同期化目的)へのアクセスが必要なので、私の秘密鍵へid_dsa
のアクセスが必要です。
正しく動作するようにシステムサービスを設定するには?次のサービスはプロセスを正しく開始しますが、screenセッションに接続してパスワードを手動で入力する必要がありますid_dsa
。
[Unit]
Description=smd loop
After=local-fs.target network.target
[Service]
User=%i
Group=users
Type=Forking
ExecStart=/usr/bin/screen -S smd-loop-win -md "smd-loop"
RemainAfterExit=yes
手動で起動すると、smd-loop
ログイン時にパスワードの保存を開始するモジュールをインストールしたため、パスワードは不要です。id_dsa
pam_ssh
ssh-agent
答え1
ログイン時にのみサービスを実行する必要がある場合は、ssh-agent
セッションで開始したサービスに接続するようにしてください。最も簡単な方法は、プロキシソケットに固定パスを使用することです。システム操作SSH_AUTH_SOCK
と.変数が環境に存在する場合、その変数に含まれるソケットパスが使用されます。その後、ログイン時に秘密鍵を実行すると、ジョブはそれを使用できます。/home/romeovs/.ssh/darkstar.agent.socket
.profile
ssh-agent
SSH_AUTH_SOCK
ssh-agent
ssh-add
このタスクを常に実行する必要がある場合は、この目的のために特定のパスワードのないキー()を生成し、制限を使用してssh-keygen -t rsa -f ~/.ssh/smd.id_rsa -N ''
サーバーで特定のコマンドのみを実行することを承認することをお勧めします。command=
from=
~/.ssh/authorized_keys
サーバー上のファイル。このfrom=
オプションは、キーが特定のホストのログイン試行にのみ有効であることを示し、クライアントが指定したコマンドではなくcommand=
実行するコマンドを指定します。
ssh-rsa AAAA…== romeovs@darkstar no-agent-forwarding no-port-forwarding no-x11-forwarding from="[email protected]" command="somecommand --foo"
このコマンドはログインシェルによって実行されます。コマンドに引数を渡す必要がある場合は、2つのオプションがあります。
- クライアントが試みた元のコマンドは
SSH_ORIGINAL_COMMAND
環境変数にあります。解析を試している場合は、引用の問題に注意してください。 - 一部の環境変数はクライアントによって渡されます。正確な設定は、サーバー構成(ファイル
AcceptEnv
のディレクティブsshd_config
)によって異なります。
答え2
~/.ssh
暗号化されていない秘密鍵を含むIDファイルを、サービスが実行されているユーザーのディレクトリに配置する必要があります。また、たとえば、rootとして実行している場合は、HOME環境変数を設定する必要があります。
ExecStart=/usr/bin/env HOME=/root /usr/bin/screen -S smd-loop-win -md "smd-loop"
または、smd-loop
呼び出し方法を制御できる場合は、使用するIDファイルを知らせるオプションを追加ssh
できます。-I
ssh
いずれにせよ、IDファイルはそのユーザーが所有する必要があり、そのユーザー(chmod 0400 ~/.ssh/id*
)のみにアクセスできます。
答え3
パスワードを要求せずにサービスの独自のSSHキーを生成します。
次に、ターゲットシステムでauthenticate_keysに "command ="を使用して、そのキーの使用を単一のコマンドに制限します。
その後、ターゲットコマンドを実行するにはサーバーに接続するだけです。他のものを指定する必要はありません(コマンドイベントは実行されません)。