SSH

SSHとは

 Secure Shell。暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。 パスワードなどの認証部分を含むすべてのネットワーク上の通信が暗号化される。

ホスト側設定

openssh-serverをインストールしておく必要がある。これをインストールする前に、パスワードなどがしっかり設定されているかなどを確認しておくこと。

$sudo apt-get install openssh-server

を実行すると外部からアクセスできるようになる。

$ sudo vim /etc/ssh/sshd_config

 ここで各種設定をする。

Port 22

鍵の生成

 鍵はクライアント側で生成することが多い。

$ssh-keygen -t ecdsa -C "comment"

を実行するとファイル名とパスワード作成を求められるが空欄でもENTERを押せば良い。すると、カレントディレクトリに「id_ecdsa」「id_ecdsa.pub」の2つのファイルが生成される。この内、「id_ecdsa.pub」を適当な手段でsshで繋ぎたい相手(ホスト側)に渡す。これは公開鍵なので、誰かに見られても大丈夫である。むしろ、どこからでもアクセスできる場所においておくのが便利である。逆に「id_ecdsa」は、秘密鍵なので、厳重に保管する。  公開鍵をホスト側のPCに移動したら、鍵リストに追加する。ホームディレクトリに.sshディレクトリがなければ作る。

$ mkdir ~/.ssh

 ここに「authorized_keys」というファイルがあれば、以下のように追加する。

$ cat id_ecdsa.pub >> authorized_keys

なければ、新規作成してから、鍵を追加する。

SSHの接続

 接続コマンドは以下の通り。ログインユーザー名と、ホストアドレスを書く。

$ssh your_username@your_domain.com

 公開鍵認証がうまく設定できていれば、これで接続ができる。失敗していると、パスワードを求められて、パスワード認証となってしまう。(sshd_confでパスワード認証が許可されている場合)  公開鍵認証を使わなくても、パスワード認証でも接続することができる。しかしこれはあまり使われない(使わないほうが良い)。

.ssh/config

 sshにつなぐときに毎回アドレスを入力するのは面倒なので、よく使うものはconfigに登録しておくと良い。

$vim ~/.ssh/config

Host local_raspi
	HostName	192.168.11.2 ←ラズパイのIP
	IdentityFile	~/.ssh/id_ecdsa
	User		kerikun11
	Port		22

Host global_raspi
	HostName	kerikeri.top ←ドメイン
	IdentityFile	~/.ssh/id_ecdsa
	User		kerikun11
	Port		22

 接続の仕方は、以下の通り。とても簡単。

$ssh global_raspi

ローカルのポートをリモートのポートにつなげる

IP制限されているホストやLAN内の機器に外からつなぐ方法

$ ssh -L 8000:target_hostname:80 ssh_hostname

これを実行した状態でlocalhost:8000につなぐと、ssh_hostnameからtarget_hostname:80につないだのと同じになる。