Termux の sshd はどんなユーザー名でも同じユーザーで入れる ── ソースで確かめる

母艦から Pixel 6(Termux の sshd)へ画像を scp するために ~/.ssh/config に エントリを足したとき、User を書いた。あとで気づいたが、相手が Termux だと ssh banana@<phone> でも ssh root@<phone> でも、同じユーザーでログインできる。 ~/.ssh/config の User 行は効いていない。設定の問題ではなく、Termux の OpenSSH ビルドの話だった。 まず観察 $ ssh -p 8022 banana@100.65.202.69 'whoami' u0_a440 $ ssh -p 8022 root@100.65.202.69 'whoami' u0_a440 Copy banana も root も通って、着地するのは u0_a440(Termux アプリのユーザー)。 鍵は /data/data/com.termux/files/home/.ssh/authorized_keys だけを見ている。 通常の OpenSSH がユーザーをどう解決するか sshd は、接続してきたユーザー名を struct passwd に解決する。これをやるのが auth.c の getpwnamallow()。素の OpenSSH ではこう: pw = getpwnam(user); Copy user はクライアントが送ってきた名前。それを /etc/passwd(実際には NSS 経由で LDAP / SSSD なども)で引く。 ...

AWSでSSH接続できない問題を解決した話

はじめに 先日、AWSで立てたEC2インスタンスにSSH接続できなくなる問題が発生しました。このトラブルの原因と解決方法を記録しておきます。同じ状況に陥った方の助けになれば幸いです。 問題の症状 EC2インスタンスにSSH接続を試みると、Connection timed out のエラーが表示される。 AWSコンソール上では、インスタンスは正常に動作中。 ブラウザからの接続は可能(インスタンス内のApacheは稼働中)。 トラブルシューティングの進め方 問題解決のため、まずはSSH接続ができない間もAWS System Managerの「セッションマネージャー」を利用しました。System Managerを活用することで、インスタンスの内部に直接ログインでき、次のような確認や操作が可能になりました: ファイアウォール(UFW)の状態確認 sudo ufw status Copy SSHサービスの状態確認 sudo systemctl status ssh Copy System Managerは、セキュリティグループやファイアウォールの設定ミスが原因でSSH接続ができなくてもインスタンス内部にアクセスできるため、非常に有用です。 原因と解決方法 調査の結果、以下の4つの原因が考えられました。 原因1: セキュリティグループのルール設定ミス 問題点 セキュリティグループでポート22(SSH)が許可されていなかった。 解決方法 AWSコンソールのセキュリティグループ設定に以下のルールを追加: タイプ: SSH プロトコル: TCP ポート範囲: 22 ソース: 自分のグローバルIPアドレス(例: 203.0.113.0/32) 原因2: UFW(Uncomplicated Firewall)がポート22を閉じていた 問題点 EC2インスタンス内のUFW(ローカルファイアウォール)でポート22が閉じられていた。 解決方法 以下のコマンドを実行してポート22を許可し、設定を反映しました。 sudo ufw allow 22 sudo ufw reload Copy 原因3: グローバルIPの変動 問題点 自分のグローバルIPアドレスが変更されたことで、セキュリティグループのルールが機能しなくなった。 解決方法 新しいグローバルIPを確認し、セキュリティグループのSSHルールを更新しました。 curl ifconfig.me Copy 原因4: インターネットゲートウェイの設定ミス 問題点 インターネットゲートウェイがVPCに正しくアタッチされていなかった。 解決方法 AWSコンソールのVPCダッシュボードで以下を確認しました: ...