GCPにTeraTermで接続する
VMインスタンスを作ったらログインです。最初は外から接続もできないので、GCPのVMインスタンス一覧からログインしてみます。
sshでログインしたシェルの画面が開きます。結構普通に使えると思います。ほぼTeraTermでカスタムできる内容は同じように設定できる気がしますし、ファイルのアップロードやダウンロードも可能なので、sshの設定をミスって脆弱にしてしまわないか心配だ!って人なら、そのままでいいんじゃないかな... 毎回GCPのコンソールに入らないといけなくなるので個人利用じゃないと無理だけども。
デフォルトのsshの設定を見る
とりあえず、sshのデフォルト設定を見てみます。なので、まず、rootになるためにsudo。
- $ sudo
- #
確かにパスワードは設定してないけど、NOPASSWD設定か。これは後で見直すにして、まずは表題の目標を。sshd_configを覗きます。
- PermitRootLogin no
- PasswordAuthentication no
- ChallengeResponseAuthentication no
sshでrootログインは禁止は当然として、パスワード認証は許可していない状態でした。sshは鍵認証でやれってことですね。あと、AllowTcpForwardingがyesのままです。管理者としては何かと便利な設定ですが、一歩間違うと踏み台され放題設定にもなりかねない要素ではあります。TCPフォワーディングを使わないならnoにしておいた方がよい設定だと思います。
インスタンスにsshの公開鍵を設置する
さて、本題です。普通のLinuxサーバと同様にキーペアを作成して、公開鍵を設置するわけですが、GCPを使う場合、自分で勝手に配置してもNGです。GCPが勝手に消してしまいます!GCPでは、コンソールからのログインを行うとき、一時的なキーペアをシステムが生成して~/.ssh/authorized_keysを作成し、一定時間経過後に削除する仕組みがあります。実際には削除ではなく、GCP側が知っている公開鍵を再設定するという方法なので、GCPに公開鍵を設定しておかないと、そのうち消える(場合がある)という感じになってしまいます。
キーペアの作成は、sshで作ってもよいですし、TeraTermで作ってもよいかと思います。
キーペアを作成したら、公開鍵をGCPのインスタンスに設定します。インスタンス名をクリックして詳細を開き、
編集をします。
すると、下の方にsshの鍵の設定が出てきます。
ここに公開鍵を設定する必要があります。公開鍵をコピペして保存すればOK、システム側に自動的に~/.ssh/authorized_keysが作成されます。公開鍵のユーザ名部分を解析してユーザ名とするので、「login名@サーバ名」のlogin名部分はログインユーザ名に合わせておく必要があります。キーペアを作ったサーバと異なるlogin名の場合は注意です。
プロジェクトにsshの公開鍵を設定する
パブリッククラウドを使う場合、普通は、1台のみなんてことはなくて、大量にサーバを作ったり、ゲームであれば、サービスインのときやキャンペーンの時にサーバ台数を増強するといった対処をすると思います。急いで増やしたい!って思ってるのに、サーバ毎に鍵を設定していられるか!ってことになるわけですが、その場合は、プロジェクトのメタデータに登録すると、インスタンス作成時にユーザを自動的に追加し、sshの公開鍵を設置してくれます。
ここに、何かしらない鍵がでているときは、googleがコンソールからのsshで自動生成した鍵がでているときと思われます。
実は、自分が一番最初に作ったインスタンスでは、全然、これがうまくいかなくて、わけがわからなくなってました。自分で鍵ファイルを置いたり、勝手にやってたせいなのか、何か変な操作をしたからなのか... 2台目からは、スムーズにできるので、これが本来の姿として利用することにしてます。