覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

RLogin で SSHトンネル用のポートフォワード設定

インターネット上のサーバの特定ポートに手元のPCから繋ぎたい。
(例えば 、パブリッククラウドのサーバのRDP用 3389 ポートへ接続(リモートデスクトップ接続)したい。)
という状況でも
企業内だと、ファイアウォールで対象ポートでの通信が許可されおらず、そのままでは接続できないというケースは結構あると思います。

そういうケースの一つの対処策として、ファイアウォールの外のSSHサーバを踏み台にしてSSHトンネルで接続するという方法になると思います。

サーバと通信するための各種クライアントツールは、組み込みでSSHポートフォワーディング(SSHトンネリング)の設定をできるケースもありますが、
そうでない場合は、そのツールとは別で 何かしらポートフォワード をしてあげる必要があります。


例えば、ターミナルソフトの RLogin での設定方法は以下のようになります。

踏み台にするSSHサーバへの接続の設定

踏み台用SSHサーバへの接続の設定です。通常のssh接続の設定と何も変わりません。(接続先が踏み台となるサーバというだけです)

f:id:nini_y:20210412182833p:plain

オプション設定 > サーバ で以下設定をする

  • ホスト名
    • 踏み台にする SSHサーバ の IPアドレス or ホスト
  • ログインユーザ名
    • ssh接続する ユーザ名
  • SSH認証鍵
    • (通常こういうケースは、公開鍵認証方式だと思うので)クリックしてプライベートキーファイルを選択する


ポートフォワード(ローカルフォワード)の設定

ローカルでのポート転送設定を行います。

f:id:nini_y:20210412183031p:plain

f:id:nini_y:20210412183135p:plain

f:id:nini_y:20210412183147p:plain

オプション設定 > プロトコル で「ポートフォワード」をクリック > 「新規」をクリック して以下設定をする

  • Listened
    • Local のラジオボタンを選択
    • Host Name
      • localhost (固定値)
    • Port
      • 適当な値 (もともと繋ぎたかったport + 10000 とかが分かりやすかもしれないです)
  • Connect
    • Host Name
      • 実際に接続するサーバの IPアドレス or ホスト
    • Port
      • もともと繋ぎたかったPort (上記の画面例では RDP につなぎたい前提なので 3389)


接続

設定後は、RLoginで設定したEntryでの接続を行います。
こうするとSSHサーバへ接続して、かつ localhost に設定したポートでの待ち受けが開始されます。

実際に接続する際は、ポートフォワードで設定したポートへ接続します。サーバ名は localhost。

上記の設定例なら localhost:13899 に接続します。



関連エントリ

オンライン試験監督付き試験の受験に関するメモ

AZ-900 - Microsoft Azure Fundamentals の資格試験を受けました。


内容自体は極端に難しいものではないので、合格しました。

この資格や試験内容等については特に触れないですが、
この試験が私にとって初めての 自宅でのオンライン受験(オンライン試験監督付き試験)だったので、
今後のために 自宅でのオンライン受験 に関しての作業についてメモしておきます。
(※AZ-900 自体は、テストセンターでも受験できるはずです)

以下の内容は、受験する資格 や 試験のプロバイダーなどによっても異なってくると思います。(私の場合は ピアソンVUE)
また、私は Windows 10 で受験しましたので、macOS での受験の場合も若干異なってくると思います。

必須

受験にあたって以下のような環境が必要になります。

  • 受験用のPC
  • インターネット回線
  • PCに接続されたカメラ(最近のノートPCなら付いてると思います)
  • マイクデバイス(最近のノートPCなら付いてると思います)
  • スマートフォン

  • 受験者を証明するもの(免許証やパスポート)

準備(前日まで)

  • ベンダーからのメール内のリンクやWebサイトから飛んで、受験の申し込みをします。
    • プロファイルが登録されていない場合、自分のプロファイルの登録が必要です。(氏名や住所、電話番号などの登録)
    • 試験を実施する(開始)日時をスケジュールします
      • おおよそ 9:00 - 16:00 ぐらいの範囲でどこでも指定できたと思います。夜中などのスケジュール指定はできませんでした。
    • 案内に従って 試験環境(インターネット回線やデバイス)のチェック(システムテスト)を行います。
      • 特定のプロセスが動いているとNGなようで、私の場合はXBox関係のプロセスをTaskManagerで停止させました。
        • この辺は OnVUE の警告メッセージで表示されました

試験準備(当日)

  • 受験するテーブルに、基本的には受験用のPCとマウス 等以外は無いようにしておきます
    • Dockみたいなものは、あっても特に何も言われませんでした
    • 箱ティッシュを置いておいたら、片付けるようにと試験監督に言われました
    • (電源はOFFにしていましたが、)外部モニターは片付けるようにと試験監督に言われました

試験へのチェックイン

  • 案内されている手順に従って、試験開始の30分前 以降に チェックイン操作をします

    • 基本的には最終的に OnVUE をダウンロードして起動する操作になったと思います
  • 試験環境の以下チェックが行われます

    • インターネット回線
    • カメラデバイス
    • マイクデバイス(画面に表示された言葉を言う必要あり)
  • 案内が行われますが、試験開始するにあたって以下のチェック・作業が必要でした

    • 自身の登録したスマートフォンの電話番号へSMSのメッセージを飛ばす
    • SMSで受け取ったメッセージ内に記載されたWebページへアクセスして以下の情報を撮影してアップロード
      • 受験者の顔写真
      • 受験者を証明するもの(免許証やパスポート)の写真
      • 受験する部屋を支持された4方向から撮った写真
  • 試験監督官と会話するチャットウィンドウが開いて、指示が行われますのでそれに従って進めます

    • カメラデバイスを360°回して受験する位置から部屋の様子を見せるように言われます
    • また、カメラデバイスで受験する手元(テーブル)の様子も見せるように言われます
  • Windowsのタスクバーで、OnVUE だけが起動しているというように見えている必要があります

    • たとえば、Webブラウザのアプリが起動している状態になっていてはいけません
    • 試験は、OnVUE のアプリ上で実施されます
  • 諸々手順を進めるとOnVUE に試験が配布されます

  • 試験開始直前に何か確認の操作があった気がします。ど忘れした。。。

    • それが終わると試験が始まります

試験開始後

  • チャット用のウィンドウはクローズしてしまって問題ないと思います
  • 画面に表示される問題をひたすら解き進めていきます
  • 問題に考え込んで、顔を手で長時間おおったりしないように気を付ける必要があります

  • 試験によると思いますが、試験完了まで進むと即座に合否が出て、それで試験終了です。

    • 特に試験監督とやり取りは発生しません
  • 試験後に一応アンケートがありますが、たぶん任意です

失格になるケース

試験失格になるケースがいくつも定義されていますが、例えば以下のようなケースも失格になります

  • 試験中に席を離れる(カメラに映らなくなる)
  • 試験中に部屋に誰か入ってきてしまった
    • 家族等がいる場合は事前にその旨伝えておいたほうがいいです


受験してみての感想

テストセンターの空き状況を気にしなくてよい。テストセンターまで物理的に行かなくてよい。 というメリットは大きいです。
ただし、自宅でのオンライン試験は、違う準備をしなければならなかったり、気にかけないといけない点もあります。
受験のための片づけ等の準備は怠らないように気を付けないと試験のチェックイン後に慌てることになる気がします。

PowerShell で sshすると UNPROTECTED PRIVATE KEY FILE

パブリッククラウド(等のインターネット空間)にLinuxのサーバ立てて、そこへSSH接続できるようにする場合は、
一般的に 公開鍵認証 の方式にすると思います。

で、試しに Windows の PowerShell から 以下コマンドで、実際にプライベートキーで接続可能かを試すこともあると思います。

ssh -i {キーファイルのパス} {リモートユーザ}@{接続先のIPアドレス or ホスト}


上記コマンドを試した場合に以下のような UNPROTECTED PRIVATE KEY FILE! という表示が出て、接続できないことがあります。

PS C:\Users> ssh -i C:\SSH_KEY\my-generated-key.pem testuser@40.115.XXX.XX

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\\SSH_KEY\\my-generated-key.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "C:\\SSH_KEY\\my-generated-key.pem": bad permissions
testuser@40.115.XXX.XX: Permission denied (publickey).


エラーが出る原因

対象のプライベートキーファイルは接続操作をしているユーザ以外の読み込みと書き込み操作から保護されている必要があり、
プライベートキーのファイルが対象ユーザー以外からもreadやwriteができてしまう場合に表示されるようです。

解決方法

例えば、macOS や Linux ならば chmod 600 {プライベートキーファイル} で、対象ファイルに自分自身だけの r+w のpermission を付与すれば問題ないようです。

ただし、Windowsだとファイルの権限操作でやる方法は結構単純ではなさそうです。
WSLで chmod 600 とかやっても解決になりません。(これはそもそも WSLとWindowsのファイルシステムの絡みの関係っぽいですが)

じゃあ、Windowsで結局どうすればいいのかというと 対象のキーファイルをユーザフォルダの配下に置けば問題ないです。
こうすれば、一応Windows上の別のログインユーザからはアクセスできない。ってことでOKってことなんでしょう。

例えば以下のようなコマンドだと、問題なくSSH接続できます。

ssh -i C:\Users\yuki\Private_Key\my-generated-key.pem testuser@40.115.XXX.XX


まとめ

Windows では プライベートキーファイル のアクセス権操作でも UNPROTECTED PRIVATE KEY FILE! による接続失敗を防ぐことはできるようですが、 ユーザフォルダ以下のどこかにプライベートキーファイルを移してしまうのが手っ取り早いです。


補足

PowerShell からの ssh コマンド接続だと冒頭に書いたエラーになっても、別のターミナルソフトウェアでのssh接続ならそもそもエラーにならない。
というパターンもあります。

Rlogin で Ctrl + v で貼り付け操作するための設定etc

Windows で Terminalソフト(SSH接続するため等諸々の用途で利用)は、色々と選択肢あると思います。

有名どころだと、PuTTY, Tera Term, RLogin など。

RLoginは、最初からタブ機能を備えていて結構扱い易いので便利に使わせてもらってます(日本だと結構な人が使ってるのでは?)。


Rloginを使っていく中で自分なりに設定をカスタマイズすることも多いですが、 久しぶりに最初から設定しなおすと設定方法を忘れていることがあるので、ここにメモしておきます。


フォントの変更

ターミナル上で表示する文字のフォントが、デフォルトでは MSゴシック になっていますが、Consolas に変更します。

オプション設定 > フォント > フォントセット 内の デフォルトのの値を MSゴシック から Consolas に 変更  > 適用 クリック

f:id:nini_y:20210410221221p:plain

(上記画面キャプチャでは、"デフォル" になってますが 実際は ”デフォルト” です)


これで、ターミナル上の文字が結構見やすくなると思います。


マウスの左クリック範囲選択でコピー + 右クリックで張り付け

ターミナル上の文字列を マウスの左クリックで範囲選択操作のみでコピーして、マウスの右クリックで 貼り付けできるようにします。

オプション設定 > クリップボード で 以下を実施して 適用をクリック

  • "左クリックの範囲指定だけでクリックボードにコピーする" にチェックを入れる
  • "右クリックでペースト" のラジオボタンを選択する

f:id:nini_y:20210410220832p:plain


Ctrl + v 操作でペースト

キーボードの Ctrl + v の操作でクリップボードのテキストを貼り付けできるようにします。

オプション設定 > キーボード で 以下を実施して 適用をクリック

  • 「新規」ボタンをクリック
  • Assign Key String のダイアログで以下を入力をして OK ボタンクリック
    • KyeCode: V
    • Ctrl にチェックを入れる
    • Assign String に $EDIT_PASTE を入力

f:id:nini_y:20210410222635p:plain

f:id:nini_y:20210410222253p:plain


これで、キーボードの Ctrl + v のショートカットキー操作でも テキストのペーストができるようになりました。


タブの表示を自分で設定した Entry名に固定

RLogin で 複数接続するなどしてタブが表示されている時に、タブに表示する値を自分が設定した Entry の名前に固定します。

オプション設定 > スクリーン で 以下を実施して 適用をクリック

  • 初期タイトルが %E になっていることを確認する
  • OSC 0/1/2 でウィンドウタイトルの変更を禁止する のチェックを入れる

f:id:nini_y:20210410223837p:plain


こうすると自分が設定したEntry名(サーバ識別用の名称)がタブに常に表示されるので、各タブがどこに接続しているかを視認しやすくなると思います。


まとめ

上記以外にもカスタマイズする部分はあったりしますが、初期設定として本エントリの内容だけでもやっておくと、使い勝手が向上すると思います。(個人的に)

Windows Terminal での Tab補完時のアラート音を消す

Windows Terminal で WSL を利用している時などに、Tabキーを押して コマンドやファイルの候補を出そうとすると、
アラート音が鳴るケースがあります。

毎度この音が鳴るのは邪魔なので、鳴らないようにしたいというケースもあると思います。


これを実現するには ~/.inputrc に 以下の記述をしておくことで可能です。

set bell-style none


ということで、以下のように操作すればできます。(以下の操作でなくても vi 等で記述してもいいわけですが)

Windows Terminal で Ubuntu を開いて、以下コマンドを実行します。

echo "set bell-style none" >> ~/.inputrc

この後、ターミナルを再起動すれば、Tabキーを押して補完候補を表示した際の音が出なくなります。


あー、すっきりした。