日々精進

新しく学んだことを書き留めていきます

sshでアクセスすると公開鍵認証してほしいのにパスワードを聞かれる

ssh hostname -vvvTを実行すると以下のログが出る。

debug1: Trying private key: /c/Users/username/.ssh/mykey.pem
debug3: sign_and_send_pubkey: RSA SHA256:nQr29X+3juJvSWOedeEVmgKCZgaO169LKCvAZCKkFKM
debug3: sign_and_send_pubkey: signing using rsa-sha2-512 SHA256:nQr29X+3juJvSWOedeEVmgKCZgaO169LKCvAZCKkFKM
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password

「receive packet: type 51」はユーザの認証に失敗したという意味。 今回の原因は/home/username/.sshフォルダの権限が600になっていたため。正しくは700。 sshはほんとハマリやすい。。

tf.keras.load_modelでモデルを読み込むと「ValueError: Unknown loss function」エラー

学習時にcustom loss functionを使った場合、load時も同じ関数をcustom_objectとして渡してやらないといけないらしい。 ただ、再学習するのではなく推論するためにmodelをloadするのであれば以下のようにcompile=Falseを指定してやればOK。

model = load_model("lc_model.h5", compile=False)

参考:

stackoverflow.com

Chromeが重くなった時の対処法

普段はアドレスバーに「chrome://restart」と打って再起動すると軽くなるが、これやってもだめな時があった。

そんなときはタスクトレイの中のChromeアイコンを右クリック→終了を選択してからChromeを起動すると軽くなった。

Chrome重いとかなりストレスフルだから、軽くなって良かった。。

縦横が混在したPDFを一括で印刷する

縦向きと横向きのページが混在しているPDFをChromeで表示して印刷すると、 すべて縦向き、またはすべて横向きで印刷するので一部のページが見きれる・・ なのでまず縦向きのページを印刷して、その後横向きのページを印刷するとか面倒なことをしていた。

Acrobat Readerなら自動で回転してくれるのですべてのページを一括で印刷できることに最近気付いた。これは楽で良い。

参考:

www.adobe.com

Kaggle Notebookで起きたエラーの原因分析をしやすくする

手元の環境で実行してもエラーが出ないが、Kaggle Notebookで実行するとエラーになる、ということがあった。

手元とNotebookではライブラリのバージョンが違うのでそのせいだと思うが・・

Notebookではデバッグ実行できないし、原因分析しづらかったのでNotebookが実行されているのと同じ環境を作ることにした。

gcr.io/kaggle-images/pythonでDockerImageが公開されているので、それにsshdなどを追加するDockerfileを作った。

FROM gcr.io/kaggle-images/python:latest

SHELL ["/bin/bash", "-l", "-c"]

# 必要なパッケージをインストールします
RUN apt -y update && apt install -y --no-install-recommends \
    wget \
    python3-distutils \
    ca-certificates \
    curl \
    python-setuptools \
    locales \
    tzdata \
    sudo openssh-server \
    nano \
    && apt clean

# Set timezone Asia/Tokyo (Ubuntu only)
RUN \
  cp /etc/localtime /etc/localtime.org && \
  ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
  sed -i -e 's/Etc\/UTC/Asia\/Tokyo/g' /etc/timezone

# Set Locale env.
RUN locale-gen ja_JP.UTF-8
ENV LANG       ja_JP.UTF-8
ENV LANGUAGE   ""
ENV LC_ALL     ja_JP.UTF-8

# 環境変数の設定

# pythonからの出力をバッファしないようにする(ログが早く届くようにするため)
ENV PYTHONUNBUFFERED=TRUE

RUN echo ". /opt/conda/etc/profile.d/conda.sh" >> /root/.bashrc

# sshログイン用にpublic keyを登録
ARG PUBLIC_KEY
RUN mkdir /root/.ssh \
    && echo $PUBLIC_KEY > /root/.ssh/authorized_keys \
    && chmod 600 /root/.ssh -R

# sshd port
EXPOSE 22

docker-compose-run.yamlは以下。

# kaggle notebook環境と同じimageからコンテナを起動する。notebookでエラーが発生した場合の原因分析に使用する
version: '2'
services:
  kaggle_nb:
    image: myrepo/kaggle_nb:latest
    container_name: kaggle_nb
    ports:
      - "2223:22"
    tty: true
    volumes:
      - "/kaggle:/kaggle"
    # コンテナ起動時にsshdを起動する
    command: bash -c "/etc/init.d/ssh start && /bin/bash"

これでコンテナを起動してPyCharmを接続すればPyCharmでデバッグ実行できる。