開発用サーバーでは権限設定が面倒なので root で操作してしまうことが多いです。とはいっても流石に ssh で外からの root でのログインは無効化しておきたいですよね。今までは sudo su – で凌いできたのですが Visual Studio Code の Remote Development では sudo で権限昇格できないっぽいので他の方法を考えました。
開発用サーバーなので妥協して、外から root ログインは無効のままで、ローカルからのみは許可すればいいのではと考えました。要するに自分自身を踏み台サーバーとして一般のユーザーでログインし、そこから root でログインするという手法です。賛否はあると思いますが、開発用ということで。
~/.ssh/config
はこんな感じです。
Host hostname-user
HostName example.com
User sshuser
IdentityFile ~/.ssh/xxxx
Host hostname-root
HostName localhost
User root
IdentityFile ~/.ssh/xxxx
ProxyCommand ssh.exe -W %h:%p hostname-user
Windows ユーザーなので ProxyCommand は ssh.exe にしています。.exe を省略すると以下のように怒られます。(前はフルパスじゃないと動かなかったような)
CreateProcessW failed error:2
posix_spawn: No such file or directory
~は解決してくれるのに不思議ですね。もちろん Windows 以外の場合は ssh にしないと動かないです。
/etc/ssh/sshd_config
には以下を追記します。
PermitRootLogin no
Match Address 127.0.0.1
PermitRootLogin yes
Match はインデント関係なく次の Match または Host が出てくるまでを範囲とするので、ファイルの最後に書いてください。
sshd -t
上記コマンドでエラーが出なければ設定ファイルは問題ないです。
systemctl restart sshd
sshd の再起動はシステムによってコマンド異なるので、読み替えてください。上記は CentOS 7 や 8 の場合です。