Gitea を使用した SSH アクセスの問題の解決
最近、ローカル マシン上の Docker コンテナを使用して Gitea サーバーをセットアップしました。接続を保護するために、Certbot が提供する SSL を使用して Nginx リバース プロキシも構成しました。
Gitea と GitHub の SSH キー生成チュートリアルに従っているにもかかわらず、Gitea サーバーに接続しようとすると、アクセス許可拒否エラーが発生しました。この記事では、SSH アクセスの問題を解決するために私が行った手順とトラブルシューティング方法について説明します。
指示 | 説明 |
---|---|
ssh-keygen | 安全な接続のための新しい SSH キー ペアを生成します。 |
eval "$(ssh-agent -s)" | バックグラウンドで SSH エージェントを起動して、SSH キーを管理します。 |
ssh-add ~/.ssh/id_rsa | 生成された SSH 秘密キーを SSH エージェントに追加します。 |
pbcopy < ~/.ssh/id_rsa.pub | SSH 公開キーを macOS システムのクリップボードにコピーします。 |
xclip -sel clip < ~/.ssh/id_rsa.pub | xclip を使用して、SSH 公開キーを Linux システム上のクリップボードにコピーします。 |
proxy_pass | Nginx 構成で指定されたバックエンド サーバーにリクエストを送信します。 |
paramiko.RSAKey.from_private_key_file | Python の Paramiko を使用して、ファイルから RSA 秘密キーを読み込みます。 |
paramiko.SSHClient().set_missing_host_key_policy | ユーザーにプロンプトを表示せずに、サーバーのホスト キーを自動的に追加します。 |
chmod 600 ~/.ssh/config | SSH 構成ファイルを保護するための正しいアクセス許可を設定します。 |
SSH 接続の問題のトラブルシューティング
前の例で提供されたスクリプトは、Gitea サーバーの SSH キー認証のセットアップとトラブルシューティングのさまざまな側面に対処するように設計されています。最初のスクリプトは、Bash スクリプトを使用して SSH キーを生成します。 ssh-keygenを使用して SSH エージェントに追加します。 ssh-add、次のいずれかの方法で公開キーをクリップボードにコピーします。 pbcopy または xclip。これらの手順は、SSH キーが正しく設定され、使用可能であることを確認するために重要です。 2 番目のスクリプトは、Gitea サーバーへのリバース プロキシ リクエストを行うように Nginx を設定し、SSL が適切に処理され、リクエストが正しく転送されるようにします。 proxy_pass。
3 番目の例の Python スクリプトは、Paramiko ライブラリを使用して SSH 接続をテストします。このスクリプトは、次を使用して秘密キーをロードします。 paramiko.RSAKey.from_private_key_file そしてGiteaサーバーへの接続を試みます。接続が失敗すると、問題の診断に役立つエラー メッセージが表示されます。 4 番目のスクリプトでは、SSH 構成ファイルを更新して、正しい設定が行われていることを確認します。のようなコマンド Host、 HostName、 User、 そして IdentityFile Gitea サーバーの接続の詳細を指定するために使用されます。ついに、 chmod 600 ~/.ssh/config 構成ファイルを保護するために適切な権限を設定します。
Gitea の SSH キー認証のセットアップ
フロントエンド構成に Bash スクリプトを使用する
# Step 1: Generate SSH Key
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# Step 2: Start the ssh-agent in the background
eval "$(ssh-agent -s)"
# Step 3: Add your SSH key to the ssh-agent
ssh-add ~/.ssh/id_rsa
# Step 4: Copy the SSH key to clipboard
pbcopy < ~/.ssh/id_rsa.pub
# If using xclip
xclip -sel clip < ~/.ssh/id_rsa.pub
Gitea 用の Nginx リバース プロキシの構成
Nginx設定ファイルの使用
server {
listen 80;
server_name your_domain;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name your_domain;
ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
SSH 接続の問題の診断
Python スクリプトを使用して SSH 接続をテストする
import paramiko
def test_ssh_connection(host, port, username, key_path):
k = paramiko.RSAKey.from_private_key_file(key_path)
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
c.connect(hostname=host, port=port, username=username, pkey=k)
print("SSH connection successful")
except Exception as e:
print(f"Failed to connect: {e}")
finally:
c.close()
test_ssh_connection('your_domain', 22, 'your_username', '/path/to/id_rsa')
Gitea の SSH 構成の更新
SSH設定ファイルの使用
# Open SSH config file
nano ~/.ssh/config
# Add the following configuration
Host gitea_server
HostName your_domain
User your_username
IdentityFile ~/.ssh/id_rsa
# Save and exit
chmod 600 ~/.ssh/config
# Test SSH connection
ssh -T gitea_server
Gitea の高度な SSH キー管理
Gitea サーバーの SSH キーを管理するもう 1 つの重要な側面は、キーの適切な処理とローテーションです。 SSH キーを定期的にローテーションすると、侵害されたキーが無期限に使用されるリスクが軽減され、セキュリティが強化されます。次を使用して新しいキーペアを作成できます ssh-keygen 新しいキーを反映するように Gitea 設定を更新します。これは、サーバーへの安全なアクセスを長期間維持するために非常に重要です。さらに、SSH キーが安全に保管され、権限のないユーザーに公開されないようにすることが重要です。次のようなツールを使用します ssh-agent メモリ内でキーを安全に管理し、秘密キーが保護されていない状態でディスク上に残らないようにします。
SSH キーと構成ファイルに厳密なアクセス許可を実装することは、セキュリティのもう 1 つの層です。のようなコマンド chmod 600 ~/.ssh/id_rsa そして chmod 600 ~/.ssh/config これらのファイルへのアクセスを制限し、権限のないユーザーがアクセスするのを困難にします。さらに、多要素認証 (MFA) を使用して、SSH キーの使用にセキュリティ層を追加することができます。 Google Authenticator やハードウェア トークンなどのツールを SSH セットアップに統合すると、2 番目の形式の検証が必要となり、不正アクセスがさらに難しくなります。
SSH アクセス問題に関する一般的な質問と解決策
- 「許可が拒否されました」エラーが表示されるのはなぜですか?
- SSH キーが SSH エージェントに正しく追加されていること、および公開キーが Gitea サーバーの承認されたキーに追加されていることを確認してください。
- 新しい SSH キー ペアを生成するにはどうすればよいですか?
- コマンドを使用する ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 新しい SSH キー ペアを生成します。
- SSH キーを ssh-agent に追加するにはどうすればよいですか?
- コマンドを使用する eval "$(ssh-agent -s)" エージェントを起動し、 ssh-add ~/.ssh/id_rsa をクリックしてキーを追加します。
- SSH 公開キーをクリップボードにコピーするにはどうすればよいですか?
- 使用 pbcopy < ~/.ssh/id_rsa.pub macOS または xclip -sel clip < ~/.ssh/id_rsa.pub Linux 上で。
- SSH キーが侵害された場合はどうすればよいですか?
- 新しい SSH キー ペアを生成し、Gitea サーバーとそのキーが使用された他のすべてのサービスのキーを更新します。
- SSH キー ファイルに正しいアクセス許可を設定するにはどうすればよいですか?
- コマンドを使用する chmod 600 ~/.ssh/id_rsa 秘密鍵ファイルに適切なアクセス許可を設定します。
- SSH 接続がタイムアウトになるのはなぜですか?
- ネットワーク接続を確認し、Gitea サーバーが実行中であり、SSH ポートが開いていてアクセス可能であることを確認してください。
- サーバーへの SSH 接続をテストするにはどうすればよいですか?
- コマンドを使用する ssh -T your_username@your_domain 接続をテストします。
安全な SSH 接続のための最終ステップ
結論として、Gitea サーバーへの信頼性の高い SSH 接続を確立するには、SSH キーの慎重な構成、Nginx プロキシ設定、および厳格なセキュリティ慣行が必要です。 SSH キーの生成と管理、適切な権限の設定、Nginx の正しい構成など、概要が説明されている手順に従うことで、ユーザーは安全で機能的なセットアップを確保できます。 Paramiko などのツールを使用して接続をテストし、キーを定期的にローテーションすることで、セキュリティと信頼性がさらに強化されます。これらの要素に包括的に対処することは、接続の問題を解決し、安全な開発環境を維持するのに役立ちます。