永続的なリバース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
サービスの開始方法:
- サーバーにsshtunnelユーザーを作成します(root権限を付与しない)
- 暗号化されていないRSAキー "id_rsa_insecure"を/root/.ssh/に入れます。公開部分をサーバーの/home/sshtunnel/.ssh/authorized_keysに入れる必要があります。
- 上記のコードを使用して "autossh.service"ファイルを生成し、/etc/systemd/systemに配置します。
- 次のコマンドを実行します。
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」ユーザーをさらに制限できます(特定のポート転送のみを許可)。しかし、便利なコードはありません。誰もがコードを持っている場合は教えてください。
現在のソリューションに存在するセキュリティバグについて聞きたいです。ありがとう
答え2
両方の方法を試すのは比較的簡単なので、両方の方法の信頼性をテストして直接確認してください。
autossh
私の考えでは、あなたはその仕事にもっと適していると思います。autossh
実行するように設計展望、systemd
主に以下のために設計されています。背景特定のサービスに添付されないテレタイププライター。
さらに、autossh
このタスクに関連する機能は少なくとも1つ必要です。
autosshは定期的に(デフォルトでは10分ごとに)モニター転送ポートでトラフィックを転送しようとします。失敗した場合、autosshはsshサブプロセスを終了し(まだ実行されている場合)、新しいプロセスを開始します。
したがって、autossh
プロセスを実行し続けるのではなく、接続がssh
実際に機能していることを確認してください。