ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

初心者によるニフクラ講座:SSHログイン~DNATを添えて~/後編

みなさんこんにちは。

小学生の時、将棋クラブに所属して、狂ったように将棋崩しをしていました(将棋はしなかった)富士通クラウドテクノロジーズの成田です。

前編の続きです。元気にやっていきましょう。

まだ前編を見ていない方はぜひ見てみてください。

ブログサムネ_後編


前回のあらすじ

DNATを用いたSSHログインの方法と設定時の注意点を皆さまに伝えるべく記事を作成しましたが、想像より3倍ほど内容が多かったため前編/後編に分けてしまい、なんと前編が環境構築だけで終わってしまいました。

前編では、SSHログインをするための環境を構築するべく、 プライベートLAN、サーバー、ルーター を作成しました。
ルーターには NATテーブル と DHCPオプション を設定し、環境構築マスターになったところで終わりました。

詳細は前編をご覧ください!

今回の目標

1. ニフティクラウドのサーバーにSSHログインできるようになる
2. SSHログインに失敗した場合のトラブルシューティングができるようになる

■おまけ
・基本的なLinuxのコマンドを覚える。

ということで、今回は TeraTerm というSSHクライアントを使用して、前回作成したサーバーにSSHログインします。

▼TeraTerm
→ 簡単に言うと、SSHログインするときに使うソフトです。

SSHログインをするための準備

SSHログインには2種類のパターンがあります。
「踏み台サーバーを経由せずSSHログインをする」パターンと「踏み台サーバーを経由してSSHログインをする」パターンです。
弊社では踏み台サーバーを経由しなければSSHログインできない環境なのですが、他の企業様でも同様のケースはあるかと思います。
そのため、両方のパターンを紹介させていただきます。

この2パターンについて、どのように違うのか図で説明いたします。

踏み台サーバーイメージ図

踏み台サーバーを経由すると、以下の作業が増えます。

・SSHキーを踏み台サーバーにアップロードする
・踏み台サーバーから目的のサーバーへSSHログインするため、SSHログインの回数が一回増える

踏み台サーバーを経由しない場合よりも作業が多いので、中身的にも少し複雑になってしまいます。
慎重に作業を行わないとどこかしらでつまづくこと間違いなしです!!!

踏み台サーバーを経由せずSSHログインをする

このパターンはすごく簡単で、ニフティクラウドのユーザーガイドに記載されていますので、そちらをご覧ください。

・参考ページ: ユーザーガイド「サーバーへのログイン方法:Linux系OSの場合」

踏み台サーバーを経由してSSHログインをする

踏み台サーバーを経由しない場合のように TeraTerm に入ったらすぐSSHログインをしたいところなのですが、踏み台サーバーを経由する場合は、そういうわけにはいかないのです。
作成した SSHキー が踏み台サーバー上になければ、SSHログインはできないのです。

ということで、ローカルに保存したSSHキーをサーバー上にアップロードしましょう。

■やってみよう

TeraTerm のメニューバーの[ファイルタブ]から「SSH SCP…」を選択してください。

SSHSCP場所

表示されたウィンドウの「Send」の隣にある「...」をクリックしてください。

SSHSCP操作

前編で保存したSSHキーを選択したら「Send」をクリックしてください。

これでSSHキーのアップロードが完了したので、実際にSSHキーがあるか「lsコマンド」で確認してみましょう。

Tips:ファイル/ディレクトリを表示する

lsコマンドはファイルやディレクトリのアクセス権限や情報を表示するコマンドです。
「-l」は「lsコマンド」のオプションで、ファイルやディレクトリの詳細を表示するオプションです。

lsコマンドを実行して、SSHキーがあるか確認してみましょう。
以下のように、前編で作成したSSHキーがあれば完璧です!!!

$ ls -l
・
・
-rw-r--r--   1 username group  1743  4月  28 12:15 SSHkey_private.pem

無事SSHキーがアップロードできたということで、皆さんお待ちかねのSSHログインをしてみましょう。
全力で以下のコマンドを実行してみましょう。

$ ssh -i ./SSHkey_private.pem username@[ルーターのグローバルIPアドレス] -p22

※-p に続く数字はポート番号を表しています。
前回作成したNATテーブルを参考にして、ポート番号を入力してください。





なんということでしょう。
あんなに全力で実行したにも関わらず、失敗しているではありませんか。

$ ssh -i ./SSHkey_private.pem username@[ルーターのグローバルIPアドレス] -p22
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for './SSHkey_private.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: ./SSHkey_private.pem
Enter passphrase for key './SSHkey_private.pem':

↓ パスフレーズを入力してもこの通り

Permission denied (publickey).

エラーさんは「アクセス権限が広すぎるぞ」とおっしゃっているようです。
アクセス権限は、先程も書きましたが「lsコマンド」で確認することができます。
(-rw-r--r--) ← こんな感じのやつがアクセス権限

では、アクセス権限をどうやって変更するんだと。 さぁやってまいりました、「chmodコマンド」です。

Tips:ファイル/ディレクトリのアクセス権限を変更する

「chmodコマンド」はファイルやディレクトリのアクセス権限を変更するコマンドです。

こんな風に使います。

$ ls -l (chmod前の権限を確認する)
・
・
-rw-r--r--   1 username group  1743  4月  28 12:15 SSHkey_private.pem
$ chmod 600 SSHkey_private.pem    ← これで「SSHkey_private.pem」のアクセス権限を変更する
$ ls -l (chmod後の権限を確認する)
・
・
-rw-------   1 username group  1743  4月  28 12:15 SSHkey_private.pem

chmodの後ろに「600」を指定することによって、「所有者のみに読み取り権限と書込み権限」を与えることができます。戦闘力ではありません。

また、今回は「600」を指定しましたが、他にも色々あるので検索サイトで「chmod 使い方」みたいな感じで調べてみてください。

■気を取り直して...

ついに、SSHログインをする準備が整いました。

以下のコマンドを実行してみましょう。

$ ssh -i ./SSHkey_private.pem username@[ルーターのグローバルIPアドレス] -p22

先程のおびただしい数の @ が出てこなくなりました。
とどめに、全力でSSHキー作成時に設定したパスフレーズを入力してください。

$ ssh -i ./SSHkey_private.pem username@[ルーターのグローバルIPアドレス] -p22
Enter passphrase for key './SSHkey_private.pem':

左側の [username@hostname] が変わったことが確認できたら、SSHログインは完了です。
余力があれば「-p10022」でもSSHログインをしてみましょう!

・CentOSの場合
[root@localhost ~]#

・Ubuntuの場合
[root@ubuntu ~]#

Tips:ネットワーク設定情報を見る

以下の3つのコマンドはすべて、ネットワークの設定状況を確認できるコマンドです。

# ip addr
# ip a
# ifconfig

SSHログインが完了したら、いずれかのコマンドを実行してみてください。
※LinuxOSでは ifconfig は非推奨となっており、「ip addr」や「ip a」コマンドが推奨されています。(実行結果に大きな違いはありません)

注目すべきは、以下にある「ens160」の「inet 192.168.0.1」の部分です。「inet ~~」は現在いるサーバーのIPアドレスを指しています。
よって、現在いるサーバーのIPアドレスは「192.168.0.1」ということがわかります。

[root@localhost ~]# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens160:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd xx:xx:xx:xx:xx:xx
    inet 192.168.0.1/24 brd 192.168.0.255 scope global dynamic ens160
       valid_lft 77633sec preferred_lft 77633sec       


[root@localhost ~]# ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens160:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd xx:xx:xx:xx:xx:xx
    inet 192.168.0.1/24 brd 192.168.0.255 scope global dynamic ens160
       valid_lft 77629sec preferred_lft 77629sec


[root@localhost ~]# ifconfig
ens160: flags=4163  mtu 1500
        inet 192.168.0.1  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 xxxx::xxx:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x20
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 2157  bytes 148924 (145.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 70232  bytes 4825914 (4.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 0  (Local Loopback)
        RX packets 46594  bytes 3619234 (3.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 46594  bytes 3619234 (3.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

それでは、コントロールパネル(以下 コンパネ)からサーバーのIPアドレスを確認してみましょう。
実行結果の inet と サーバーのIPアドレスが同じであれば大成功です!

IP確認

まとめ

▽踏み台サーバーを経由する場合は、作成したSSHキーを「SSH SCP」でサーバー上にアップロードしましょう
・Linuxコマンド
- lsコマンド
  ファイルやディレクトリを表示するコマンド
  「-l」をつけることで、詳細な情報が表示されます。
 - chmodコマンド
  「chmod mode(600とか) [ファイル名] 」で、指定したファイルのアクセス権限を変更できる
 - ネットワークの状態を見るコマンドは以下の3つがあります。
- ip addr
- ip a
- ifconfig
LinuxOS では、ifconfig は非推奨のため、ip addr 若しくは、ip a コマンドが推奨されています。

■今回の記事で皆さんに2番目に伝えたいこと

ニフティクラウドブログニフティクラウド FAQ(よくあるご質問) には沢山のナレッジが存在します。 今回紹介した SSHログイン についても FAQ に注意点が掲載されています。

参考ページ:ニフティクラウド FAQ(よくあるご質問)SSH公開鍵認証の注意点はありますか?

ニフティクラウドについて知りたいこと/わからないことがあったら、一度ご覧になってみてください!

トラブルシューティング

前編/後編に分けて、ニフティクラウドで作成したサーバーにSSHログインする方法をご紹介しました。
最後に、皆さんに1番伝えたかった、SSHログインができなかった時の原因と解決方法を紹介いたします。

■case1: DNATの設定がされていない

※プライベートLANのみに接続されているサーバーが対象
前編で紹介した原因です。

DNATの設定がされているかを確認するにはコンパネの [ルーター>DNAT] をクリックして確認することができます。
もしDNATが設定されていない場合は設定してあげましょう。

■case2: デフォルトゲートウェイが設定されていない

※プライベートLANのみに接続されているサーバーが対象
前編で紹介した原因です。

ルーターに DHCPオプション が設定されているか確認してみましょう。
もし DHCPオプション が設定されていなかったら設定してあげましょう。

■case3: SSHキーがサーバー上に存在しない

※踏み台サーバーを経由するSSHログインの場合対象
今回紹介した原因です。

Teraterm(今回の場合)で「lsコマンド」を実行して、SSHキーがサーバー上に存在しているか確認してみましょう。
もしSSHキーがなかった場合は、[踏み台サーバを経由してSSHログインをする] を参照して、SSHキーをサーバー上にアップロードしてあげましょう。

■case4: SSHキーのアクセス権限が広い

今回紹介した原因です。

Teraterm(今回の場合)で「ls -lコマンド」を実行して、使用しているSSHキーのアクセス権限を確認してみましょう。
アクセス権限の変更したい場合、[chmodコマンド] を参照して、SSHキーのアクセス権限を変更してあげましょう。

先生用画像

「上記4点がブログ記事内でご紹介した原因たちです。これらの原因以外にも、下記のような原因も考えられます。」

■case5: SSHコマンド実行時の指定したSSHキーが誤っている

「sshコマンド」実行時に指定したSSHキーの名前が間違っている可能性があります。
「lsコマンド」を実行して、指定したSSHキーの名前が正しいか確認してみましょう。

■case6: SSHコマンド実行時のユーザー名が誤っている

「sshコマンド」実行時に指定したユーザー名が間違っている可能性があります。
適切なユーザー名を指定してあげましょう。

■case7: ファイアウォールでSSHの通信が許可されていない

サーバーに設定しているニフティクラウドのファイアウォールでSSHの通信が許可されていない可能性があります。
ポート番号22 が許可されているか、コンパネの左メニューにある [ファイアウォール] をクリックして確認してみましょう。
サーバーに設定しているニフティクラウドのファイアウォールのINルールにポート番号22が許可されていなかったら、許可してあげましょう。

終わりのご挨拶

皆さんに一番伝えたかった、「ログインできない時の原因と解決方法」書けたところで、これにて「初心者によるニフクラ講座:SSHログイン」を終了とさせていただきます。最後まで読んでいただきありがとうございましたー!

先生用画像 「これであなたもSSHログインマスター」