• ベストアンサー

sshポートフォワーディングがサービス化出来ない

以下内容でserviceファイルを作成しserviceを起動したところうまく起動しません。手動でExecStartの内容をそのまま実行すると問題なく動作します。何が考えられますでしょうか。 OS:Centos7 実行は全てrootで実行しています。 よろしくお願いいたします。 serviceファイルの内容 ============= [Unit] Description=SSH Port Forwarding After=network.target [Service] #User=root ExecStart=/usr/bin/ssh -i /mnt/disk01/rdskey/xxxxxxxx.pem -L 5439:xxxxxx.xxxxx.xxxxxx.rds.amazonaws.com:5432 -o ServerAliveInterval=30 xxxxxxx@xxx.xxx.xxx.xxx -p 22 -N -f [Install] WantedBy=multi-user.target status ================================= [root@localhost ~]# systemctl status portforward.service ● portforward.service - SSH Port Forwarding Loaded: loaded (/etc/systemd/system/portforward.service; disabled; vendor preset: disabled) Active: inactive (dead) 4月 11 16:54:13 localhost.localdomain systemd[1]: portforward.service: main process exited, code=exited, status=217/USER 4月 11 16:54:13 localhost.localdomain systemd[1]: Unit portforward.service entered failed state. 4月 11 16:54:13 localhost.localdomain systemd[1]: portforward.service failed. 4月 11 16:57:34 localhost.localdomain systemd[1]: Started SSH Port Forwarding. 4月 11 16:57:34 localhost.localdomain systemd[1]: portforward.service: main process exited, code=exited, status=217/USER 4月 11 16:57:34 localhost.localdomain systemd[1]: Unit portforward.service entered failed state. 4月 11 16:57:34 localhost.localdomain systemd[1]: portforward.service failed. 4月 11 16:58:20 localhost.localdomain systemd[1]: Started SSH Port Forwarding. 4月 11 17:02:10 localhost.localdomain systemd[1]: Started SSH Port Forwarding.

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

あなたの問題を理解し、以下の点を考慮してみてください。 systemd サービスファイルの設定で気をつけるべき点として、SSH コマンドに `-f` オプションが含まれていることが挙げられます。`-f` オプションの目的は SSH セッションをプロセスの前景ではなく、バックグラウンドで実行することですが、systemd は既にこのサービスをバックグラウンドで稼働させるため、このオプションは不要です。systemd が管理するサービスはデフォルトでバックグラウンドで実行されるため、SSH コマンドは `-f` オプションなしで実行されるべきです。 また、status 出力にある `code=exited, status=217/USER` のメッセージは、存在しないユーザー名を指定しているか、あるいはそのユーザーが適切に機能していないことを意味しています。コメントアウトされている `#User=root` 行が問題を引き起こしているかもしれません。`User=root` 行をコメントアウトしたままにしていると、サービスはユーザーが指定されていない状態で起動を試みます。この場合は、ユーザー指定を明確にするか、またはその行を完全に削除して root ユーザーで実行されることを確認してください。 ここで修正をすすめる手順を示します: 1. `-f` オプションを ExecStart コマンドから削除します。 2. `User=root` 行が必要な場合は、コメントアウトを解除し適切なユーザーが指定されていることを確認します。そうでない場合は、この行を削除して root で実行されることを確認します。 修正後、以下のコマンドを実行してサービスファイルの再読み込みと再起動を試みてください: ``` systemctl daemon-reload systemctl restart portforward.service ``` 修正により問題が解決するか確認してください。セキュリティの推奨としては、必要ならばSSHの公開鍵認証を正しくセットアップし、極力rootユーザーでの実行は避けることをお勧めします。また、ポートフォワーディングを自動起動させる場合は、セキュリティ面での考慮(例えばフォワーディングするポートのIP制限など)も忘れずに行ってください。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/

関連するQ&A