#chiroito ’s blog

Java を中心とした趣味の技術について

Javaで16進数の乱数を生成

Java で32桁の16進数の乱数を簡単に作りたいなと思ったので作ってみたメモ。

byte[] bytes = new byte[16];
SecureRandom random = new SecureRandom();
random.nextBytes(bytes);
String hexString = HexFormat.of().formatHex(bytes);

これで変数 hexString には 7ffda83291c2b5e47db3557138ef7799 のような文字列が入ります。

16進数の 1 桁は 4 bit で、byte は 8 bitです。なので、欲しい桁の半分のbyte配列を作成します。

SecureRandomのパラメータとかは必要に応じて良い感じに設定すると良いと思います。

JetBrains GatewayとIntelliJ IDEAでリモート開発

3行で

  • リモートの潤沢なリソースを使って開発したい!
  • 軽いのが良い!
  • IntelliJ Gatewayを試したよ

背景

普段はWindowsのデスクトップマシンでIntelliJ IDEAを使用して開発しています。外出することはほぼありませんが、外出の際はリソースの少ないノートPCからデスクトップへリモートデスクトップして開発していました。 しかし、画面全体の転送は要らないし、IDEの情報だけ送って開発できないものかと思い、TLで聞いてみたところ、IntelliJ Gatewayなるものの存在を教えてもらえ、さっそく導入してみました。

環境

JetBrains Gatewayを起動すると、以下のようなウインドウが表示されます。

JetBrains Space、WSL、SSH Connectionの順で試してみました。

  • JetBrains Spaceは別途リモートサーバが必要そうで、既存のデスクトップは活用できなさそうでした。
  • WSL は同一 Windows からしかアクセスできなさそうでした。

(上記違ってたらだれか教えてください)

なので、今回は SSH を使って以下のような環境を構築するようにしました。

(ペンギンの絵はChatGPTが作成)

環境構築

Mac や Linux のデスクトップ環境ならSSHサーバを含んでいると思いますが(使ったことないのでイメージです)、Windows は標準でSSHサーバを含んでません。そのため、Windows Subsystem for Linux (WSL)上にSSHサーバを構築します。

SSHサーバ

まずは、 WSL (赤枠)の準備をします。

WSL 上の Ubuntu で以下のように必要なパッケージをインストールします。

> apt-get install openssh-server net-tools

SSH サーバが通信を受け付けているかを確認します。

> netstat -tl | grep ssh
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN

SSH でアクセスするユーザを作成します。以下の例ではchiroitoです。

> adduser chiroito
Adding user `chiroito' ...
Adding new group `chiroito' (1000) ...
Adding new user `chiroito' (1000) with group `chiroito' ...
Creating home directory `/home/chiroito' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for chiroito
Enter the new value, or press ENTER for the default
        Full Name []: Chihiro Ito
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y

これでWSL上でSSHを受け付ける準備は出来ました。

転送

次に、Windows の外からWSL上の SSH にアクセスできるようにしましょう。これは、Windowsが受け付けた通信を WSL 側へ転送するように設定します。

この転送には WSL のIPアドレスが必要です。

(このIPアドレスは変わる事があるらしいので、変わっても大丈夫なように設定が必要ですが、今回はしていません)

> ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:67:02:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.154.2/20 brd 192.168.159.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe67:259/64 scope link
       valid_lft forever preferred_lft forever

WSL の IP アドレスは192.168.154.2でした。

このIPアドレスを IP という変数に入れておきましょう。

IP=192.168.154.2

次に、Windows が受け付けた通信を、WSL に転送する設定をします。

まずは、現状の設定を確認してみましょう。以下のコマンドを WSL 上で実行します

> netsh.exe interface portproxy show v4tov4

転送の設定が何もなければ上記のようになにも表示されません。

次に、転送の設定をしてみましょう。Windows の全てのIPアドレス(listenaddress=*)の 22 番ポートの通信(listenport=22)を、WSL の IPアドレス(connectaddress=$IP)の 22 番ポート(connectport=22)へ転送しています。

> netsh.exe interface portproxy add v4tov4 listenaddress=* listenport=22 connectaddress=$IP connectport=22

もう一度転送の設定を確認してみましょう。

> netsh.exe interface portproxy show v4tov4

ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               22          192.168.154.2   22

転送の設定はこれで終わりです。

ファイアウォール(必要であれば)

Windows のファイアウォールを有効にしている場合は、その設定も必要です。

Windows標準ではないソフトを使っている場合はそちらの設定が必要です。Windows標準の場合は、Windows で WF.mscを実行すると以下のようなウインドウが表示されます。

左側の受信の規則をクリックすると、以下のように画面が変わります。

右側の新しい規則... をクリックします。

ダイアログが表示されるので、以下のように設定しましょう。

  • ポート を選択
  • TCP を選択
  • 特定のローカルポートに 22 を設定
  • 接続を許可する を選択
  • ドメイン/プライベート/パブリック (セキュリティを気にする場合はちゃんと設定してください)
  • 名前を適当に設定

完了を押すとファイアウォールの設定は完了です。

JetBrains Gateway

次は、ついにノートPC側で JetBrains Gatewayの設定です。

ノートPCでJetBrains Gatewayを実行します。

New Connectionをクリックします。

最初はConnectionのドロップダウンリストが空なので、右側の歯車をクリックして作成します。

左上の+をクリックして、図のようにSSHに必要な情報を入力します。Host は WSL が動いている方の Windows の IP アドレスです。デスクトップのIP が分からない場合は、デスクトップで ipconfigコマンドを実行して確認しましょう。デスクトップがDHCPでIPを割り当てられている場合は固定IPにするか、ホスト名を使うと良いかもしれません。

設定が終わったら TestConnection を押します。

このダイアログが出れば成功です。OKをクリックして、画面を戻りましょう。

Connectionのドロップダウンリストで先ほど作ったものを選択します。

あとは、Check Connectioni and Continue をクリックします。

IDEとプロジェクトのあるディレクトリを選択して、Download IDE and Connectをクリックします。

なお、Windows上のディレクトリは、WSL の /mnt ディレクトリ以下にあります。

ダウンロードが終わると、以下のようにSSHのプロジェクトが作成されます。

また、同時に指定した IDE が開きます。

1度目はダウンロードに時間がかかりますが、2度目からは素早く開きます。

IDE自体もかなりサクサク動きます。

これで、ノートPCから離れたところにあるデスクトップのリソースを使って開発できるようになりました。外出先からの場合は VPN などを使って自宅に接続してからデスクトップにアクセスしてみてください。