本ブログはLTEや無線LAN等を搭載したArmadilloを経由して、本来直接外部からSSH接続できない装置へ
SSH接続する方法をご説明します。
全体の構成
クライアントから直接SSH接続できない装置Aに対して、中継サーバー(Armadillo)を経由してSSH接続します。
今回はクライアント~中継サーバーへはwifiで接続していますが、LTEを使用する事も可能です。
本ブログでは中継サーバーにArmadillo-IoT G3Lを使用して説明します。
クライアントと中継サーバーの接続はArmadillo-IoT G3Lの無線LANのアクセスポイントを使用します。
アクセスポイント化の設定はこちらを参照下さい。
《注意事項》
クライアントからLTE経由でArmadillo-IoT G3LやArmadillo-IoT A6E(Cat.1モデル)にアクセスする場合、
デフォルト設定では外部から直接アクセスが出来ません。製品マニュアルを参考にファイアウォールの
設定変更を行ってください。
本ブログで実施する事
1.sshのインストール~設定(公開鍵認証)
2.sshの設定
3.1回のコマンドで中継サーバーを通じてターゲットサーバーにsshアクセス
本ブログではsshでログインするユーザーは"test_user"として記載します。
rootでのログインは禁止とします。(後にrootログイン禁止設定をします)
実施手順
1.sshのインストール~設定(公開鍵認証)
まだSSH接続できない為、それぞれ個別にコンソールで下記を準備する。
・クライアント:openssh-serverのインストール、鍵の作成
・中継サーバー:openssh-serverのインストール、鍵の作成
・ターゲットサーバー:openssh-serverのインストール
openssh-serverをインストール
$ apt-get update && apt-get upgrade -y
$ apt-get install openssh-server
鍵作成(本ブログではrsaのみ作成)
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test_user/.ssh/id_rsa): //Enterを押す
Enter passphrase (empty for no passphrase): //パスワード入力
Enter same passphrase again: //パスワード入力
Your identification has been saved in /home/test_user/.ssh/id_rsa. //作成された秘密鍵
Your public key has been saved in /home/test_user/.ssh/id_rsa.pub. //作成された公開鍵(後にサーバーに配置する)
この状態で既にパスワード入力でSSHログインは出来る様になっています。
次に作成した公開鍵をサーバーに配置します。
SCPコマンドで公開鍵を鍵情報をサーバーへ渡す(クライアント⇒中継サーバー 10.0.0.1は適宜変更)
パスワードを聞かれる為、中継サーバーのtest_userのパスワードを入力する
$ scp ~/.ssh/id_rsa.pub test_user@10.0.0.1:~/.ssh/authorized_keys
中継サーバーにSSHログインする:パスワード入力(直接中継サーバーへログインでも可)
$ ssh test_user@10.0.0.1
中継サーバーの公開鍵と.sshディレクトリの権限を変更します。
権限はtest_userがread可能な最低限の権限とする
※test_userがファイルアクセス出来ないとPermission deniedで弾かれ、ログイン出来ない
ファイルの権限の変更例(chmodで700/744,600/644等を設定)
$ chmod 700 /home/test_user/.ssh
$ chmod 600 /home/test_user/.ssh/authorized_keys
確認として、現在のtest_user権限で下記をアクセス出来ればOK
(アクセス出来ない場合はsuでroot権限に切り替えて再度変更)
$ cat /home/test_user/.ssh/authorized_keys
2.sshの設定
鍵の設定が完了したら次はsshdの設定(/etc/ssh/sshd_config)を変更します。
/etc/ssh/sshd_config を変更する(以下は設定例)
$ vi /etc/ssh/sshd_config
<以下変更点のみ>
Port 30022 //外部からアクセスされることを想定してポートを変更
HostKey /etc/ssh/ssh_host_rsa_key //ホスト認証における秘密鍵のパス
PermitRootLogin no //root権限でのログイン禁止
PubkeyAuthentication yes //公開鍵認証を有効化
AuthorizedKeysFile .ssh/authorized_keys //公開鍵の保存場所指定
PasswordAuthentication no //パスワード認証の禁止
PermitEmptyPasswords no //空パスワードの禁止
ChallengeResponseAuthentication no //チャレンジ&レスポンス禁止
設定が完了したらsshdを再起動して動作確認します。
ここまでの設定を間違えているとSSH接続が出来なくなります。
その場合は vi /etc/ssh/sshd_config の PasswordAuthentication を yes に変更で
パスワードでログインできるようになる為、再度設定をご確認下さい。
$ su //rootに切り替え
# systemctl restart sshd
# exit //rootから抜ける
$ exit //sshから抜ける
次にクライアントから中継サーバーに公開鍵認証でssh接続できるか確認します。
パスワード不要でログイン出来れば完了です。
sshでログイン(パスワード不要)
$ ssh test_user@10.0.0.1
次に、中継サーバーとターゲットサーバーで上記と同様に公開鍵の配置、sshdの設定を
行います。(同じ手順の為、割愛)
以上で、クライアント⇒中継サーバー⇒ターゲットサーバーと2段階でSSH接続が出来ます。
sshでログイン(パスワード不要) ※IPは適宜変更
$ ssh test_user@10.0.0.1
$ ssh test_user@192.168.3.84
3.1回のコマンドで中継サーバーを通じてターゲットサーバーにsshアクセス
毎回2度ログインする事は面倒である為、1コマンドでSSH接続出来る様にします。
まず、クライアントの公開鍵(~/.ssh/id_rsa.pub)をターゲットサーバーのauthorized_keysに
追加書き込みを行います。
次にクライアント側で下記の設定ファイルを作成します。
$ cat ~/.ssh/config
Host target_server
HostName 192.168.3.84 //ターゲットサーバーIP
User test_user //ターゲットサーバーのtest_user
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh -W %h:%p -i ~/.ssh/id_rsa -p 30022 test_user@10.0.0.1 //中継サーバー設定
以上で、下記コマンドで一括で接続できるようになります。
ターゲットサーバーにSSH接続
$ ssh target_server
以上で完了となります。