fu7mu4’s diary

はてなダイアリーから移転しました。

SourceTreeにも貢献できる?

SourceTree にも貢献できる?

Atlassian の SourceTree for macOS は一部翻訳されていないので、Atlassian の製品なのに不思議だなと思っていた。 SourceTree をいじっていると、環境設定→一般→Language & Regionに SourceTree への翻訳にご協力ください というリンクがあることに気がついた。

リンク先は https://www.transifex.com/atlassian/sourcetree-for-mac/dashboard/ となっていた。ボランティアとして翻訳ができるもよう。マジか。

Windows に Linux から公開鍵認証方式でsshやscpを実行したい

Window に Linux から公開鍵認証方式でsshやscpを実行したい

Microsoft のOpenSSH が入っているWindowsLinux の OpenSSH から公開鍵認証方式で ssh や scp したい。

Windows の前提

  • Windows 10または Windows Server
  • 外部からSSH ログインができる
  • その際の認証方式はパスワード認証
  • 設定を変更するため管理者権限のあるアカウントがある
  • 仮でWindows ホスト名は Win-server とする

Windows での作業

1. sshd_configで公開鍵認証方式を有効にする

MicrosoftのドキュメントのWindows Configurations in sshd_config/OpenSSH Server configuration for Windows Server and Windows によると、Windows 用の sshd_config は %programdata%\ssh\sshd_config (または、C:\ProgramData\ssh\sshd_config) らしい。

Win-server に管理者権限でログインして、このファイルを編集する必要がある。該当ファイルを別のフォルダにコピーして、ファイルを編集しそのファイルを元のフォルダに戻すとよい。

なお編集は次の箇所のコメントを外すだけである。

#PubkeyAuthentication yes

次のようになればOK

PubkeyAuthentication yes

2. OpenSSH のサービスの再起動

OpenSSH の設定ファイルsshd_configを読み込ませるには、OpenSSH サービスを再起動する必要がある。

コントロールパネルから再起動することもできますし、PowerShell からも再起動できるようです。

Linux での作業

1. sshの公開鍵と秘密鍵を作成する

OpenSSH の公開鍵と秘密鍵を用意する。基本的には既存のものを使いまわさない方がいいので作成することになる。

暗号方式としては、ed25519方式が推奨されているが、RSAでもよいだろう。

ed25519 方式の暗号鍵なら次のコマンドを実行する。

ssh-keygen -t ed25519

RSA方式の暗号鍵なら 4096 ビット長の鍵にしておいた方が安心なので次のコマンドで作成する。

ssh-keygen -t rsa -b 4096

2. Windows に公開鍵をデプロイ

Win-serverに公開鍵を登録したい。しかし、Microsoftドキュメントの 公開キーのデプロイ/OpenSSH キーの管理 によると、Windows ではそのアカウントが管理者権限か一般のアカウントかで鍵を登録するファイルが異なるそうだ。

なお、ssh-copy-idWindows 向けには動作しないようです。

2-1. 一般ユーザー

ssh-copy-id は動作しないのですがすることは同じ。

Win-server の一般ユーザー username に公開鍵をデプロイするには、そのユーザーのホームディレクトリに.ssh を作成して、authorized_keys ファイルに追加する。

まず、Linux から Win-serverusername として ssh でログインして、ユーザーのホームディレクトリに .sshディレクトリを作成する。Windows はパス区切り文字には/でも代用できる。Linux では\特殊文字と扱われるので避けてみる

設定が完了できていないので、パスワードの入力が必要。

ssh username@Win-server mkdir "C:/Users/username/.ssh"

ディレクトリが存在していた場合は、エラーになります。

エラーにならなかった場合

ディレクトリを作成したら、その中に authorized_keys を作成して、公開鍵を追加する。

Linux で作成した公開鍵が ~/.ssh/id_ed25519.pub だったとして次のコマンドを実行する。

設定が完了できていないので、パスワードの入力が必要。

scp ~/.ssh/id_ed25519.pub username@Win-server:C:/Users/username/.ssh/authorized_keys

エラーになった場合

エラーになった場合は、ディレクトリが存在していたのかもしれません。dir コマンドなどで中身を確認するといい。

ssh username@Win-server dir "C:/Users/username/.ssh"

authorized_keys ファイルがあれば、scp コマンドでファイルを取得して Linux 上で確認しよう。

2-2. 管理者権限のユーザー

Microsoft ドキュメント管理ユーザー/OpenSSH キーの管理 によると、管理者のアカウントの場合は、C:\ProgramData\ssh\ に作成した、administrators_authorized_keysファイルに公開鍵を登録する必要がある。

C:\ProgramData\ssh はすでに存在していることがわかっているので、administrators_authorized_keys ファイルに Linux から公開鍵をコピーすればいい。また、Windows ならではなだが ACL を設定する必要がある。

ここでは、Win-serverのアカウントはusername とし、Linux で作成した公開鍵が ~/.ssh/id_ed25519.pub だったとして次のコマンドを実行する。

scp ~/.ssh/id_ed25519.pub username@Win-server:C:/ProgramData/ssh/administrators_authorized_keys

ファイルを登録したら、ACL を設定する。

ssh username@Win-server icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

3. 確認

Linux から Windows にファイルを送信するなどして確認する。うまくいけば、~/.ssh/config などの作成も検討しよう。

scp -i ~/.ssh/id_ed25519 test username@Win-server:test

Emacs 28.1 をソースからビルド

Emacs 28.1 をソースからビルド

Emacs 28.1 がリリースされていたのでとりあえずソースからビルドしよう

https://github.com/emacs-mirror/emacs/tags から emacs-28.1 の zip をダウンロード

unzip emacs-emacs-28.1.zip
cd emacs-emacs-28.1
./autogen.sh
mkdir -p ~/work/usr/local
./configure --prefix=~/work/usr/local/
make

プロになるJava日記

プロになるJava日記

ISBN:978-4-297-12685-8 の プロになるJava を購入した。Java は雰囲気しか知らなかったのでこの際プロになってみよう。

私の環境

  • macOS 12.3.1
    • Intel Mac
    • 2020 年の 13 インチモデル
  • Java
    • openjdk version "17.0.2" 2022-01-18
    • OpenJDK Runtime Environment Temurin-17.0.2+8 (build 17.0.2+8)
    • OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (build 17.0.2+8, mixed mode, sharing)
  • Intellij Community Edition
    • 2021.3.3

1章

  • 以前に Intellij をインストールしてあったので、そのまま更新して使うことにした。
  • プロになるJava はキーマップの設定をデフォルトにするように勧めていたが、よくわからないのでそのままでいいことと考えた

2章

  • Intellij のキーマップがおかしい? →あ、そうかを繰り返してしまう。

3章

3.1 JShell

  • JShell は Java9 から導入されたらしい、Java の REPL らしい。
  • ふーん、やっぱり Common Lisp のREPLって優れたアイディアだったんだなーと感心。
  • あれ、Intellij のファイルの内容をJShell に送信する機能が 3.1章にでてこないぞ?

4章

  • 特になし