autosshとsystemdは重複していますか?

autosshとsystemdは重複していますか?

永続的なリバースSSHトンネルを作成するときにsystemdを実行しているシステムでautosshが役に立ちますか?通常、autossh は -M オプションが 0 に設定されたサービスとして実行され、リンク監視が無効になります。これは、autosshが再起動する前にsshを終了する必要があることを意味します。マニュアルページから:

監視ポートを0に設定すると、監視機能はオフになり、autosshはsshが終了したときにのみsshを再起動します。たとえば、最新バージョンの OpenSSH を使用している場合は、ServerAliveInterval オプションと ServerAliveCountMax オプションを使用して、SSH クライアントがサーバーに接続されていないことを確認したら、SSH クライアントを終了させることができます。多くの点で、これはモニタリングポートよりも優れたソリューションです。

systemdサービス自体は、次のオプションを含むサービスファイルを介してこれを実行できるようです。

Type=simple
Restart=always
RestartSec=10

もしそうなら、systemdサービスで実行するとautosshは重複しますか?それともSSH接続を維持するのに役立つ他のタスクを実行していますか?

ありがとうございます。

ベストアンサー1

良い質問をいただきありがとうございます。 autossh -M 0で実行されるシステムサービスがあります。そして、systemdでautosshを使用することが重複していることに気づきました。

これは私の新しいサービスであり、autosshではありません。 ssh プロセスを直接終了しても正常に実行され、再起動されます。

[Unit]
Description=autossh
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=
ExecStart=/usr/bin/ssh -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -o ExitOnForwardFailure=yes -R8023:localhost:22 sshtunnel@[address of my server] -N -p 22 -i /root/.ssh/id_rsa_insecure
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

サービスの開始方法:

  1. サーバーにsshtunnelユーザーを作成します(root権限を付与しない)
  2. 暗号化されていないRSAキー "id_rsa_insecure"を/root/.ssh/に入れます。公開部分をサーバーの/home/sshtunnel/.ssh/authorized_keysに入れる必要があります。
  3. 上記のコードを使用して "autossh.service"ファイルを生成し、/etc/systemd/systemに配置します。
  4. 次のコマンドを実行します。
sudo systemctl daemon-reload
sudo systemctl start autossh
sudo systemctl enable autossh

いくつかの説明:

ExitOnForwardFailure

これが私が初めて逃したことです。このオプションがないと、何らかの理由でポート転送が失敗した場合(実際にはそうなります)、SSHトンネルは存在しますが役に立ちません。したがって、終了して再起動する必要があります。

/root/.ssh/id_rsa_insecure

名前が示すように、キーは暗号化されていないため、特別なキーである必要があり、キーを使用するユーザーがバックチャネルを作成する以外にサーバー側で何も実行できないように制限する必要があります。最も簡単な方法は、サーバー側でauthorized_keysファイルの動作を制限することです。

# /home/sshtunnel/.ssh/authorized_keys
command="/bin/true" ssh-rsa [the public key]

これにより、ユーザー "sshtunnel"がシェルを起動してコマンドを実行するのを防ぎます。

追加のセキュリティ:

試してみましたがうまくいきませんでした。 1) サーバー側: "sshtunnel" ユーザーの /etc/passwd のシェルを /bin/false に変更します。 2) サーバー側: Permitopen=host:port sshtunnel を追加します。 Authorized_keys ファイル id_rsa_insecure キー

試していませんが、うまくいくと思います。 SELinuxユーザープロファイルを設定して、「sshtunnel」ユーザーをさらに制限できます(特定のポート転送のみを許可)。しかし、便利なコードはありません。誰もがコードを持っている場合は教えてください。

現在のソリューションに存在するセキュリティバグについて聞きたいです。ありがとう

おすすめ記事