Windows の Docker Ubuntu に SSH で接続する

🔴 Dockerfile
FROM ubuntu

USER root

# sshサーバをインストール
RUN apt-get update && apt-get install -y openssh-server

# sshd用
RUN mkdir /var/run/sshd

# rootのパスワード
RUN echo 'root:pass' | chpasswd

# sshのrootでのアクセスを許可
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

docker build -t default_repo:default_tag .

ssh root@localhost -p 22

参考 1
参考 2

以下が出たら対象の記述を削除して再実行( 登録される )

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:XBwm/W+C5V4fTIce7Pmo4GaX7Wnut+FkkQM7Bj4WWEc.
Please contact your system administrator.
Add correct host key in C:\\Users\\lightbox/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\lightbox/.ssh/known_hosts:6
Host key for localhost has changed and you have requested strict checking.
Host key verification failed.

Notion まとめリンク

Docker, 記録

WSL に Ubuntu をインストール

まず、インストール可能なディストリビューションの一覧を表示します。

wsl -l -o

wsl --install -d Ubuntu

その他、コマンドライン

-l [オプション]
    ディストリビューションを一覧表示します。
    -v オプション
        すべてのディストリビューションに関する詳細情報を表示します

-s <ディストリビューション>
    ディストリビューションを既定として設定します。

-t <ディストリビューション>
    指定されたディストリビューションを終了します。

--unregister <ディストリビューション>
    ディストリビューションの登録を解除し、ルート ファイルシステムを削除します。


通常のインストールですと、完全な削除は以下から



WSL の最新バージョンの確認

▼ GitHub で最新バージョンが確認できます。
一番上にあるのは、プレリリースなので、latest が通常の最新になります。

WSL プレリリース

WSL latest

今ですと、▼ こうなります。

wsl --update

すでにそのバージョンがインストールされている場合は以下のように表示されます

更新プログラムを確認しています。
Linux 用 Windows サブシステムの最新バージョンは既にインストールされています。

JavaScript : window オブジェクトのプロパティとしてグローバル変数を定義する

実際は、右辺にオブジェクトをセットして専用の名前空間で参照できるライブラリのインスタンスとして利用します。

ルートで var で定義する変数と厳密には違うようですが、事実上同じと思っていいと思います。ですから、Fucntion 内でグルーバルな変数を利用したい場合は、window オブジェクトを使用すると良いでしょう
window.変数名 = "lightbox"

または

window["変数名"] = "lightbox"

例えば、ライブラリを簡単にまとめると以下のような定義のしかたになります。
(function(){

    S = {

        // いろいろな定義

        },

    // いろいろな定義
    ;

    window['MyLIB'] = S;

})();


(function(){})(); は、関数を定義して呼び出すのを一度に行う書き方で、無名関数を定義して () で実行しています
<script>

window["MyLIB"] = "lightbox";


(function(){

	alert(MyLIB);

})();

</script>




ブラウザ上で変更可能な選択した文字列を英語から日本語に翻訳するブックマークレット

最初、claude.ai に作成してもらいました。ai が作成するチャットのタイトルが英語で困っていたので。

javascript:(function(){
    var selectedText = window.getSelection().toString();
    if (selectedText) {
        fetch('https://api.mymemory.translated.net/get?q=' + encodeURIComponent(selectedText) + '&langpair=en|ja')
        .then(response => response.json())
        .then(data => {
            var translatedText = data.responseData.translatedText;
            document.execCommand('insertText', false, translatedText);
        })
        .catch(error => console.error('Error:', error));
    } else {
        alert('テキストを選択してください。');
    }
})();

これで動作はしていますが、api.mymemory.translated.net と言う良く詳細の解らない API が使われているので、
同じ事をもう一度 claude.ai に聞いてみると、Google の API で返して来ました。
しかし、今度はコードがおかしくてうまく動きませんでした

原因究明するより、動作しているほうのコードに、主体の API を転記しました。

javascript:(function(){
    var selectedText = window.getSelection().toString();
    if (selectedText) {
        fetch(`https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=ja&dt=t&q=${encodeURIComponent(selectedText)}`)
        .then(response => response.json())
        .then(data => {
            var translatedText = data[0].map(item => item[0]).join('');
            document.execCommand('insertText', false, translatedText);
        })
        .catch(error => console.error('Error:', error));
    } else {
        alert('テキストを選択してください。');
    }
})();


1回目で動いたのは運が良かったと言わざるを得ないので、今後は数回。できれば AI も変えて試すのがいいと思いました。