【自宅サーバ】グローバルIPで自宅サーバにSSH接続する方法

グローバルIPで内部LANではなく外部から自宅サーバにSSH接続するための確認事項をまとめましたので、参考までに。

ちなみに私の場合は以下の環境となっています。
自宅サーバ:Linux(CentOS7)
ルータ:ひかり電話ルータ(PR-400NE)
SSH接続クライアント:JuiceSSH

※予め、自宅サーバのローカルIPは固定しておいてください。

グローバルIPを確認

自宅サーバが設置してある環境のグローバルIPを事前に確認しておきましょう。
ここからグローバルIPを確認できます。

自宅サーバにOpenSSHが導入されているか確認

自宅サーバにOpenSSHがインストールされているかを確認します。
# yum list installed | grep ssh

もし、openssh-serverがなかったら
# yum -y install openssh-server
でOpenSSHをインストールします。

自宅サーバのOpenSSHの設定を確認

自宅サーバのOpenSSHの設定を確認します。
# vi /etc/ssh/sshd_config

そして、SSHのポートが何番になっているかを確認します。通常は
#Port 22
となっているはずなので、この場合はそのままデフォルトの22番ポートでOKです。
もし、Portのコメントが外れていたら、そのポート番号を覚えておいてください。

自宅サーバのOpenSSHが起動しているか確認

OpenSSHが起動しているか確認します。
# systemctl status sshd

これで、Active: active (running)となっていなかったら
# systemctl start sshd
で、OpenSSHを起動します。

自宅サーバのファイアウォールを確認

一応、ファイアウォールを確認します。
# firewall-cmd --list-all

servicesの一覧にsshが追加されているのを確認します。

もし、sshが存在しなかったら
# firewall-cmd --permanent --add-service=ssh
で追加します。

ルータのポート開放設定を確認

ルータのポートが解放されているか確認します。
人によってルータが異なるので一概に言えませんが、基本的には「静的IPマスカレード」を設定します。
以下、PR-400NE(ファームウェア8.04)の場合です。

ブラウザにルータのローカルIPを入力し、ルータの管理画面に入ります。
私の場合は「192.168.1.1」がルータのローカルIPです。
ルータの管理画面に入ったら「詳細設定」の「静的IPマスカレード設定」を選びます。

「NATエントリ」に以下の設定の項目が存在し、チェックが付いているか確認します。
変換対象プロトコル:TCP
変換対象ポート:3で確認したSSHのポート番号(デフォルトは22)
宛先アドレス:自宅サーバのローカルIP
宛先ポート:変換対象ポートと同じ

存在しチェックが付いていたらルータの自宅サーバへのSSHポートは解放されています。

もしなかったら空いている蘭の「編集」を選択します。

「NATエントリ編集」で以下の様に入力し、「設定」ボタンを押します。
変換対象プロトコル:TCP
変換対象ポート:3で確認したSSHのポート番号(デフォルトは22)
宛先アドレス:自宅サーバのローカルIP

設定したら、左のほうにあるチェックボックスにチェックを入れ、「設定」を押します。

最後に、変更を保存します。

これで、ルータの自宅サーバへのSSHポートは解放されました。

グローバルIPで自宅サーバに接続!

1~6までの項目が確認出来たら、1で確認したグローバルIPで自宅サーバに接続できる様になっているはずです。
コマンドから接続する場合は
# ssh ユーザ名@グローバルIP
こんな感じで接続できるはずです。

ちなみにですが、内部LANのクライアントからはグローバルIPでSSH接続出来ないので注意してください。
内部LANのクライアントでグローバルIPで接続したい場合、クライアント毎にhostsを設定しなければいけません。

お疲れ様でした。

【オブジェクト指向講座】目次

オブジェクト指向講座の目次です。
オブジェクト指向をどの様に捉えればいいのかを普通とは違う視点で考えます。

【第1回オブジェクト指向講座】オブジェクト指向って結局何なのさ

【第2回オブジェクト指向講座】継承とかカプセル化とかの前に

【第2回オブジェクト指向講座】継承とかカプセル化とかの前に

オブジェクト指向講座目次

前回 【第1回オブジェクト指向講座】オブジェクト指向って結局何なのさ

こんにちはyoship1639です。

オブジェクト指向講座第2回になります。

前回は、オブジェクト指向の目的とか意識しなければいけないことを中心にお話ししました。

今回は、オブジェクト指向の目的を達成するための手段である継承とかカプセル化とかの前に考える大事なことの話をしようと思います。

テーマは「継承とかカプセル化とかの前に」です。

  • 手段と目的の話

いきなりですが、皆様は「手段」と「目的」についてどのようにお考えでしょうか。

もちろん、手段によって目的を達成する。目的は手段によって達成される。という関係が成り立ちますね。

私はこれに更に別の見方を入れています。

それは、「手段は目的に成り得る(逆も然り)」です。

「手段は目的に成り得る」の簡単な例として、魚を釣るために釣竿を買うを考えます。

当然、魚を釣るのが目的で釣竿を買うのが手段ですね。

少し手を加えます。

「〇〇漁港に出没した幻の魚を釣るために釣竿を買おう。しかし、釣竿にはそれぞれに良し悪しがあるため慎重に選ばないといけない。一体どれを選んだらいいんだろう。」

より良い釣竿を買うために慎重に選ぶという行動が追加されました。

これに手段と目的に当てはめると「より良い釣竿を買うという目的のために慎重に選ぶという手段」となります。

この様に「釣竿を買う」という行為は見方を少し変えると目的にも手段にも成り得てしまいます。

しかし、慎重に釣竿を選んでいる間に幻の魚は○○漁港から姿を消してしまいました。

この場合、本来の目的である幻の魚を釣る事が出来ず、慎重に釣竿を選ぶという別の目的が達成できました。

どう考えても意味ないです。幻の魚を釣ることが達成できないのですから。

 

さて、なぜこの話をするのかというと、巷のオブジェクト指向プログラミングにこれと似た状況が多発しているからです。

前回、人がプログラムを組み易く、変更し易く、拡張し易くするのがオブジェクト指向の目的で、継承・カプセル化・ポリモーフィズムはそのための手段とお話ししました。

継承とかカプセル化とかを使うことが目的になってはいけません。達成しなければならないのはプログラ厶を組み易く、変更し易く、拡張し易くすることです。

  • 継承とかカプセル化とかの前に知って欲しいこと

回りくどくオブジェクト指向の目的を念押ししました。

なぜそこまでしたかというと、これが言いたかったからです。

継承とかカプセル化とかの前に、自分が作りたいものが頭の中で整理できていないと、オブジェクト指向の恩恵は殆ど得られません。

つまり、設計力やオブジェクトの捉え方がオブジェクト指向の恩恵に直結します。

自分自身がオブジェクト指向プログラミングで作りたいものが、予め頭の中で整理整頓されているという「先読み」ができないと、いくら継承やらカプセル化やらをやったところでただのハリボテにしかなりません。

意味のないゲッターやセッター、継承になってしまうのです。

次回は、オブジェクト指向において設計や先読みがいかに重要かをプログラムの例を通して実感してもらいたいと思います。

【第1回オブジェクト指向講座】オブジェクト指向って結局何なのさ

オブジェクト指向講座目次

次回 【第2回オブジェクト指向講座】継承とかカプセル化とかの前に

こんにちはyoship1639です。

この講座では、オブジェクト指向がいまいちよくわからない方や、プログラミングで活用できている気がしない方に向け、私の経験則から考えそしてたどり着いたオブジェクト指向プログラミング(OOP)をどの様に捉え、どの様に活用していくべきかというノウハウを皆様と共有できればと考えております。
そして、この講座を通して少しでもオブジェクト指向プログラミングを知ってもらい、実際に活用出来る様になっていただければと考えております。

今回のテーマは「オブジェクト指向って結局何なのさ」です。

  • オブジェクト指向のよくある捉え方

さて、いきなりですが「オブジェクト指向」と聞いたら皆様は何が思い浮かびますか。

「クラスを継承して〇〇」とか「データのカプセル化」とか「ポリモーフィズムで抽象化」とかがよく聞くフレーズで、基本的にその辺りが思い浮かぶのではないかと思います。

そしてなぜそのフレーズばかりが思い浮かんでしまうのかというと、ほとんどのサイトがオブジェクト指向の説明をするとオブジェクト指向の3原則である「継承」「カプセル化」「ポリモーフィズム」をベースに説明をしていくためその用語ばかりが目についてしまい、オブジェクト指向が継承とかカプセル化で出来ていると錯覚し、イメージがそういうものだと定着してしまうからではないでしょうか。

上の文章を読めば分かる通り私はそのようなイメージには否定的で、オブジェクト指向の本質からかけ離れて一部分だけを見ている状態であると思っています。

オブジェクト指向は「継承」「カプセル化」「ポリモーフィズム」で成り立つものではありません。それらはただの手段です。

「継承」「カプセル化」「ポリモーフィズム」は手段で、オブジェクト指向の目的ではありません。

これらを使えばオブジェクト指向になるというのは誤った考えなので気を付けてください。

  • オブジェクト指向って何?

じゃあオブジェクト指向って何なのさと疑問に思われると思います。

簡単に結論を申しますと、オブジェクト指向は「人がプログラムを組み易く、修正し易く、拡張し易くするための手法」です。

これも結構当たり前のように言われていますがこれが私の考えるオブジェクト指向の本質です。思った以上に大事です。

何が言いたいのかというと、「継承」「カプセル化」「ポリモーフィズム」を使っても「プログラムを組み易く、修正し易く、拡張し易く」することを意識していないと、何の意味もないということです。

「プログラムを組み易く、修正し易く、拡張し易く」ということを意識しないで継承だとかカプセル化だとか使っても無駄です。見た目的にオブジェクト指向っぽくなるだけで中身は手続き指向と何も変わらなくなります。

勉強する気がないのに勉強しても内容が頭に入らないのと同じです。

少し整理します。

オブジェクト指向は、人がプログラムを組み易く、修正し易く、拡張し易くすることを目的としたプログラミング手法であり、継承・カプセル化・ポリモーフィズムはそれらを達成するための手段である。
プログラムを組み易く、修正し易く、拡張し易くすることを意識して継承・カプセル化・ポリモーフィズムを使わないとオブジェクト指向の恩恵は得られない

とても大事な概念なので、覚えておいてください。

次回 【第2回オブジェクト指向講座】継承とかカプセル化とかの前に

【Android】バンドリ!ガルパ総合力シミュレータ


スマートフォン向けリズムゲーム「バンドリ!ガールズバンドパーティ!」。通称「ガルパ」のバンド総合力をシミュレーションし、バンドの今後の組み合わせの計画立てるためのAndroid向けシミュレータツールを開発しました。

こちらからダウンロードできます。
Google Play で手に入れよう

バンドとエリアアイテムを選ぶとすぐに総合力が算出されます。
ガルパをやっている方はぜひ使ってみてください。

ガルパ公式サイト:https://bang-dream.bushimo.jp/

画像付箋ソフト Peta

デスクトップに画像を付箋として貼り付けることができるアプリケーションです。
名前は「Peta」といいます。
配布サイト:http://puma.cis.ibaraki.ac.jp/products/peta/
※Windows10では動きません!

画像を付箋のように貼り付けておきたい時ってありますよね。
それに特化したプログラムとなっております。

Petaをインストールすると、PCにある画像の右クリックメニューに「デスクトップに貼り付ける」が追加されます。
それを選択するとあっという間に画像がデスクトップにぺたりと貼り付きます。
アプリケーションとして貼り付くので、背景画像が変わるわけではありません。付箋の画像バージョンです。

画像の付箋ソフトというのは他にもたくさんあるのですが、Petaの特徴は何といってもシンプルさです。
無駄にタスクバーに常駐したり変なメニューが現れたりしません。画像だけ貼りつきます。
シンプルさこそすべてなのです(暴論)。

興味があったら使ってみてください。

画像ビューワ ImageSlider v2.1

ImageSliderのロゴ
随分と前に開発した画像ビューワです。
名前は「ImageSlider」といいます。
公開サイト:http://yoship1639.github.io/ImageSlider/

通常の画像ビューワは自分のPC上にある画像を閲覧するものですが、このImageSliderはインターネット上にある画像をスライドショーで表示するアプリケーションとなっています。
検索窓にキーワードを入力すると、関連する画像をインターネット上から検索し、見つかった画像をそのままスライドショーで表示するというありそうでなかったもので、画像検索に利用したり、デスクトップ上に配置してスライドショーを楽しんだり、自分の好きな使い方ができます。

窓の杜やVectorでも紹介されているので、興味があったら使ってみてください。
窓の杜:http://forest.watch.impress.co.jp/library/software/imageslider/
Vector:http://www.vector.co.jp/soft/winnt/art/se512327.html

一応Githubにも上げてあります。
Github:https://github.com/yoship1639/ImageSlider

最近更新していないため不具合があるかもしれませんが、もし気になることがあったらコメントでご連絡ください。