LinuxのSSHに関する世界観です。
SSHはリモートのマシンにログインする「リモートログイン」ソフトウェア。
リモートのLinuxマシンにログインし、UNIXコマンドを実行したり、パッケージをインストール・更新したり、サービスを起動・停止したり、設定ファイルを編集したりする、「リモート管理」を行うことができる。
Linuxを使う上で、コマンドラインのOSを使うメリットとして言えるのは、「GUIよりも高度なことが簡単にできる」とか「スクリプトで自動化したり、パイプで複数のコマンドを組み合わせることができる」などとよく言われ、コンソール(端末の白黒画面のターミナル)やGUIの端末エミュレータ(GUIの中でコマンドラインが使えるターミナル)から使うこともできますが、コマンドラインの醍醐味はSSHでリモートのサーバーにログインするなどして、リモートからコマンド操作を行うことだと思います。
たとえばWindows上のTeraTermなどの端末エミュレータから、リモートのLinuxサーバーマシンにログインし、操作を行う。この時、mkdirやcpなどのUNIXコマンドを覚えていると、多くのUNIXコマンドが使える。UNIXコマンドの大きなメリットは、「SSHでリモート操作ができる」ということが多い。
ただし、リモートからログインできるため、セキュリティ管理には注意が必要。昔からのUNIXエンジニアにはrlogin/telnetを使ったログインがお馴染みだが、SSHはそれらよりもセキュリティが高いとされている。
あまり使う頻度は多くないかもしれないが、WindowsからLinuxのGUIアプリケーションを起動したい場合は、Cygwin/Xなどが使用できる。僕は使ったことがないので実際は分からないが、Cygwin上のXでもおそらくリモートのXアプリケーションに接続できる(Xはネットワーク透過なクライアント・サーバーシステムである)。
また、リモートデスクトップとしてはVNCと呼ばれるソフトウェアがある。これはリモートのコンピュータを遠隔操作することができ、Windowsなどでも使用できる。
リモートのマシンにログインして、コマンド操作を行うことが出来る。
セキュリティ上の注意点として、出来るだけパスワード方式ではなく、公開鍵・秘密鍵方式を使って、デフォルトのポートを変更すること。
オープンソースなSSHの実装。
Wikipedia
ソースコード
主要なコマンド:
コマンド | 説明 |
---|---|
ssh | リモートログイン(リモートでのコマンド実行)を行う。 |
scp | リモートでのファイル転送を行う。 |
ssh-keygen | 公開鍵と秘密鍵の鍵ペアを生成する。 |
ssh-copy-id | 公開鍵をリモートマシンに登録する。 |
sshコマンドの例:
ssh [user@]hostname [command]
ユーザー名を省略すると、クライアントで今ログインしているユーザーとなる。
コマンドを指定した場合、そのコマンドがリモートで実行され、省略した場合、リモートで実行するコマンドを入力可能なプロンプトが表示される。
詳しくは以下のページを参照のこと。
暗号も参照のこと。
SSHの設定を参照のこと。
sshfsは、リモートのマシンのディレクトリをローカルのディレクトリにSSHを使ってマウントすることのできるソフトウェア。
マウントしたディレクトリはローカルのディレクトリと同じように通常のUNIXコマンドで操作できる。
rlogin/telnetはSSHより古いコマンドで、パスワードなどを含めて全通信を暗号化せずに平文で行ってしまう問題があるため、現代のUNIXユーザはsshを使おう。
TeraTermはWindowsにおける端末エミュレータで、telnetなどでWindowsからLinuxにリモートログインするためなどに使う。
TeraTerm Projectでは原作者によるTera Termオリジナル版の後継版を開発している。
TTSSHモジュールによりSSHにも対応している。
実際のところ、プログラミングを行う上で必要なこととは、「与えられた条件から機能を作ること」と、「OSの仕様をよく知っておくこと」です。
たとえば、SSHを作りたいのであれば、まず、リモートでUNIXにログインできなければなりません。そして、リモートでネットワークを通じて暗号化した上で入出力をやり取りし、接続したホストでコマンドを実行しなければなりません。
そのために必要なのは、まず「UNIXでどのようにすればプログラムからログインできるのか」ということを知っておくことと、「ネットワークという条件の下にどのようにリモートシェルを実現するのか」ということを考えることです。
すなわち、APIレベルでログインする方法が分かってしまえば、後は単にネットワーク接続の仕様を上手く利用し、与えられた条件で機能を作るようにすれば、SSHはおそらく作れます。
そのように、プログラミングにおいては、そのOSあるいはプログラミング言語やライブラリAPIやフレームワークの仕組みに習熟しておくことと、その上で与えられた最低限の方法から自分の作りたい機能をどのようにすれば作れるのかを考えることが重要となります。
SSHの開発だけではなく、どんな機能やソフトウェアであってもプログラミングにおいてはすべてに同じことが言えるでしょう。
プログラミング作法(エキスパート)も参照のこと。
2024.06.18
ネットワークからサーバーに接続し、コマンド操作ができる。
以前はtelnetなどが使われていたが、セキュリティの問題がありsshが使われることが標準になった。
コマンドで何でもできるため、侵入されると恐ろしいことになる。推奨設定は、「パスワードではなく公開鍵暗号を使うこと」「rootログインを禁止すること」「デフォルトのポート番号を変更すること」など。