この記事を三行にまとめると
ec2-userと同じようにrootでのSSH接続を可能にするインスタントラーメン作ってる間にrootでの接続を可能にする
会社で一番自由なやつが開発王だ
AWSのEC2でインスタンスを作成すると、そのインスタンスだか仮想サーバーだかにSSHで接続できるようになります。
ただし、そのときに接続するユーザーは「ec2-user」っていうのになります。
こんな感じですね。秘密鍵のパスってのは、AWSだとインスタンスを作成するときとかに「***.pem」っていう鍵を作るんで、それのパスですね。
ec2-userでサーバーに接続した後、rootに切り替える場合は「sudo」ってコマンドを使います。
もちろん毎回この手順を踏めば良いんですけど、もしそれがめんどいって場合。最初から直接rootでアクセスしたいって場合があるかもしれない。
そういうときはどうすれば良いか。
やり方は簡単です。インスタントラーメン作ってる間にできちゃう。
まずec2-userでSSH接続して、sudoコマンドでrootに切り替える。そしたら「etc/ssh/」の下に「sshd_config」っていうファイルがあるはずなので、それをviモードで開く。同じフォルダの中に「ssh_config」っていうファイルもあると思うから、間違えないようにね。dがついてる方ね。
何でこんな、極めて似た名前のファイルがあるんだろうね。ゴールド・ロジャーをゴール・D・ロジャーって言うようなもんかな。
sshd_configファイルを開くと中に「PermitRootLogin forced-commands-only」って書いてある行があるんで、それを「PermitRootLogin without-password」と書き換える。あるいは#を使ってコメントアウトしちゃっても大丈夫だと思う。
ログイン認証用の鍵ってのは、秘密鍵と公開鍵ってのがペアになってます。秘密鍵は.pemファイルとして自分で持ってるやつで、公開鍵はサーバー上にファイルが置いてある。
さっきsudoコマンドによりrootに切り替わった状態になってると思うんで、そのまま、サーバー上にあるec2-user用の公開鍵を、rootの方にコピーしてしまいましょう。公開鍵は、各ユーザーの「.ssh」っていう隠しフォルダっぽいとこの中にある「authorized_keys」っていうファイルがそうです。なので、ec2-userだったら「/home/ec2-user/.ssh/authorized_keys」だし、rootなら「/root/.ssh/authorized_keys」になるかな。
今回は、ec2-userの方にあるauthorized_keysを、rootの方のauthorized_keysに上書きする。ただし念の為、rootの方のauthorized_keysはバックアップを取っといた方が良いかもね。
コピーが終わったらsshdを再起動する必要があります。無事に再起動が終われば、以後はec2-userで接続するときと同じ要領で、rootでもssh接続ができるようになる。
一応こうしとけば、Transmitとか使ってSFTP接続とかするときにも使えますかね。
ただまあ、本当はrootで直接ログインできるのってセキュリティ的には問題があると思うから、もしやるなら自己責任でって感じですねー。会社のポリシーとかでそういうの禁止されてたら、おとなしく従うしかないね。おとなしく従うのが嫌なら、ゴール・D・ロジャーのように海賊王になるしかないかな。この海で一番自由なやつが海賊王だってルフィも言ってたし、同じように会社で一番自由な開発王になって、ルールやポリシーを決める側になるしかないですね。
僕ですか? ふふふ、僕はもちろん開発王ですよ。何せ会社にエンジニアが一人しかいないですから。支配もしない。何せ支配する相手がいないですから。いつもいつでも一人で気ままに開発しております。
ただし、そのときに接続するユーザーは「ec2-user」っていうのになります。
# ssh -i 秘密鍵のパス ec2-user@IPアドレス
こんな感じですね。秘密鍵のパスってのは、AWSだとインスタンスを作成するときとかに「***.pem」っていう鍵を作るんで、それのパスですね。
ec2-userでサーバーに接続した後、rootに切り替える場合は「sudo」ってコマンドを使います。
# sudo su -
もちろん毎回この手順を踏めば良いんですけど、もしそれがめんどいって場合。最初から直接rootでアクセスしたいって場合があるかもしれない。
そういうときはどうすれば良いか。
やり方は簡単です。インスタントラーメン作ってる間にできちゃう。
rootでのログイン許可を取る
手順だけ先に書いちゃうと、↓ですね。デフォルトだとrootでのログインはコマンドを使ってしかできないようになってるんで、それを解除するって感じです。「forced-commands-only」って、いかにもコマンドだけだぜって言ってるっぽいやん?//ec2-userでSSH接続
# ssh -i 秘密鍵のパス ec2-user@IPアドレス
//rootに切り替え
# sudo su -
//viモードでsshd_configを開く
# vi /etc/ssh/sshd_config
//書き換えるかコメントアウトのどっちか
PermitRootLogin forced-commands-only
→PermitRootLogin without-password
→#PermitRootLogin forced-commands-only
まずec2-userでSSH接続して、sudoコマンドでrootに切り替える。そしたら「etc/ssh/」の下に「sshd_config」っていうファイルがあるはずなので、それをviモードで開く。同じフォルダの中に「ssh_config」っていうファイルもあると思うから、間違えないようにね。dがついてる方ね。
何でこんな、極めて似た名前のファイルがあるんだろうね。ゴールド・ロジャーをゴール・D・ロジャーって言うようなもんかな。
sshd_configファイルを開くと中に「PermitRootLogin forced-commands-only」って書いてある行があるんで、それを「PermitRootLogin without-password」と書き換える。あるいは#を使ってコメントアウトしちゃっても大丈夫だと思う。
ec2-userの公開鍵をコピる
次は、ec2-userの秘密鍵を使ってrootでもログインできるようにしてみます。これも先に手順だけ書いちゃうと↓です。//バックアップを取っておく
cp /root/.ssh/authorized_keys /root/.ssh/authorized_keys_bk
//ファイルをコピー(上書き)
cp /home/ec2-user/.ssh/authorized_keys /root/.ssh/authorized_keys
//sshdを再起動
service sshd reload
ログイン認証用の鍵ってのは、秘密鍵と公開鍵ってのがペアになってます。秘密鍵は.pemファイルとして自分で持ってるやつで、公開鍵はサーバー上にファイルが置いてある。
さっきsudoコマンドによりrootに切り替わった状態になってると思うんで、そのまま、サーバー上にあるec2-user用の公開鍵を、rootの方にコピーしてしまいましょう。公開鍵は、各ユーザーの「.ssh」っていう隠しフォルダっぽいとこの中にある「authorized_keys」っていうファイルがそうです。なので、ec2-userだったら「/home/ec2-user/.ssh/authorized_keys」だし、rootなら「/root/.ssh/authorized_keys」になるかな。
今回は、ec2-userの方にあるauthorized_keysを、rootの方のauthorized_keysに上書きする。ただし念の為、rootの方のauthorized_keysはバックアップを取っといた方が良いかもね。
コピーが終わったらsshdを再起動する必要があります。無事に再起動が終われば、以後はec2-userで接続するときと同じ要領で、rootでもssh接続ができるようになる。
# ssh -i 秘密鍵 root@IPアドレス
一応こうしとけば、Transmitとか使ってSFTP接続とかするときにも使えますかね。
ただまあ、本当はrootで直接ログインできるのってセキュリティ的には問題があると思うから、もしやるなら自己責任でって感じですねー。会社のポリシーとかでそういうの禁止されてたら、おとなしく従うしかないね。おとなしく従うのが嫌なら、ゴール・D・ロジャーのように海賊王になるしかないかな。この海で一番自由なやつが海賊王だってルフィも言ってたし、同じように会社で一番自由な開発王になって、ルールやポリシーを決める側になるしかないですね。
僕ですか? ふふふ、僕はもちろん開発王ですよ。何せ会社にエンジニアが一人しかいないですから。支配もしない。何せ支配する相手がいないですから。いつもいつでも一人で気ままに開発しております。