皆さん、こんにちは。
ゼロバンク・デザインファクトリー株式会社(以下、ZDF )にてTechnical Lead をさせて頂いている家壽田(けすだ)です。
今回は、Google Cloud Compute Engine をお使いの方々にちょっとした注意事項をお届けできればと思い、筆をとりました。
はじめに
以下条件にて実施しています。
- Google Cloud Compute Engine 上のLinux VM をGoogle Cloud コンソール(GUI )から作成しています。
- OS Login は有効にしていません。
- アクセス経路はIdentity Aware Proxy (以下、IAP )経由になります。
- ログインアカウントはm.kesuda@{domain} です。(Google Cloud コンソール / gcloud コマンド共)
- gcloud コマンドはWindows のコマンドラインにて実行しています。
Google Cloud コンソールから、ブラウザ経由でSSH してみる
m_kesuda@{vm name}:~$
ユーザー名はm_kesuda (アンダースコア)になっています。
gcloud コマンドでscp してみる
Linux VM 上のユーザーIDがアンダースコア付きなので、/home/m_kesuda
にscp してみます。
※事前にtest.txtの準備を忘れずに。(異なるエラーtest.txt: No such file or directory
が出ますので)
gcloud compute scp test.txt {vm name}:/home/m_kesuda --zone {zone} --tunnel-through-iap --project {project name}
と
pscp: unable to open /home/m_kesuda/test.txt: permission denied
ERROR: (gcloud.compute.scp) [{省略}\Google\Cloud SDK\google-cloud-sdk\bin\sdk\pscp.exe] exited with return code [1].
権限がないと怒られます。
ログインアカウントはブラウザ経由のSSH と同じなのになぜ?!
gcloud コマンドでSSH してみる
gcloud compute ssh {vm name} --zone {zone} --tunnel-through-iap --project {project name}
と
m.kesuda@{vm name}:~$
ユーザー名がm.keusda (ピリオド)になっているのがわかります。
scp 先を変更してみる
gcloud コマンド経由でSSH した際にユーザー名がピリオドになっていたので/home/m_kesuda
を/home/m.kesuda
に変更して実行してみます。
gcloud compute scp test.txt {vm name}:/home/m.kesuda --zone {zone} --tunnel-through-iap --project {project name}
と
test.txt | 0 kB | 0.0 kB/s | ETA: 00:00:00 | 100%
成功。
ブラウザ経由でSSH した際のユーザーID のホームに転送するには?!
gcloud コマンドの場合、Linux VM 上のユーザーID はピリオド付きで認識されるので、VM 名にブラウザ経由でSSH した際のユーザーID を認識させる形でscp してみます。
gcloud compute scp test.txt m_kesuda@{vm name}:/home/m_kesuda --zone {zone} --tunnel-through-iap --project {project name}
と
test.txt | 0 kB | 0.0 kB/s | ETA: 00:00:00 | 100%
成功。
実際、Linux VM 上ではどうなってるかと言えば。。。
$ ls -al /home
total 16
drwxr-xr-x 4 root root 4096 Feb 2 06:24 .
drwxr-xr-x 18 root root 4096 Feb 2 06:23 ..
drwxr-xr-x 3 m.kesuda m.kesuda 4096 Feb 2 06:31 m.kesuda
drwxr-xr-x 3 m_kesuda m_kesuda 4096 Feb 2 06:35 m_kesuda
当たり前と言えば当たり前ですが、別のアカウントとして認識されています。
まとめ
Google アカウント名にピリオドが含まれている場合において、ブラウザ経由のSSH と gcloud コマンド経由のSSH / scp ではLinux VM 上のユーザーID が変わってしまうケースがあるようです。
全てを洗い出した訳ではありませんが、
- ブラウザ経由のSSH = アンダースコア (ピリオドからの変換あり)
- gcloud コマンド経由のSSH / scp = ピリオド (変換なし)
ということになります。
ご注意を!!
尚、Google アカウント名にピリオドなど文字以外がないname@{domain}
の場合は変換される要素がないので、どちらでも同じアカウントとして認識されます。
終わりに
紛らわしいので、どちらかに統一頂きたいものですね。(^^;